cmake 如何在不复制源代码的情况下用Conan构建我的项目

x4shl7ld  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(163)

我有一个C/C ++项目,用cmake配置,用conan create构建,使用conanfile.py
我不需要在我将要上传的包中导出我的源代码。我只需要把生成的库放在包中。因此,我不需要在conanfile.py中使用export_sources。另外,export()方法(或其等效的export属性),我不知道为什么,但需要太多的时间来复制我的源文件从其原始文件夹到柯南缓存文件夹,虽然只有一个1KB的小. txt文件.
首先,我想描述每种文件夹的含义:

    • 原始文件夹:**路径conanfile.py以及CMakeLists.txt和我的源代码(. cpp),位于src目录下。还请注意,我在此路径中执行conan create
    • Conan缓存文件夹:Conan创建自己的临时文件夹来工作:构建、来源、导出等。在source()build()conanfile.py的方法,ConanFilesource_folder等属性已经引用了这些缓存文件夹,而不是原始文件夹**。还要注意,conan也在这些缓存文件夹中复制conanfile.py__file__的路径也给出了这些缓存文件夹。

因此,在build()方法中,当我执行“self.run('cmake”时,我需要引用原始文件夹,但据我所知,ConanFile没有它。这对我来说似乎很奇怪,因为我不相信我的情况是如此奇怪。我想柯南已经有了解决方案。
那么,这是一个坏的做法,还是有一个解决方案的柯南,我不知道?
请注意,no_copy_source属性不会产生任何差异,因为它只是关于Conan缓存文件夹之间没有复制。
如果无论如何,我需要从原始路径复制我的源到柯南缓存文件夹,为什么export,或copy需要太多的时间,即使是一个单一的1kb文件的同一台机器?(由于时间太长,我的意思是,复制那个小文件,它卡住了1分钟。它在等什么?)
不管是哪种情况,我该怎么办?

    • conanfile. py**
from conans import ConanFile, CMake, tools
import shutil, os, inspect

class MyConan(ConanFile):
    name = "MyLib"
    version = "0.0.1"
    generators = "cmake"
    no_copy_source = True
    exports = "CMakeLists.txt" # Takes too much time to copy it

    def source(self):
        current_dir = os.getcwd() # This already points to cache folders
        

    def source(self):
        # self.source_folder is pointing to cache folders. I have already lost path of original folder 

    def build(self):
        cmake = CMake(self)
        #self.run('cmake %s --preset="my-preset"') HOW TO REFER TO my original source folder? Or HOW TO copy my sources to Conan cache folders without taking too much time
        #cmake.build()
    • 命令:**
cd /path/of/conanfile/and/sources
conan create . 0.0.1/whatever/hotfix
piah890a

piah890a1#

通过conan create在Conan缓存中构建的代码总是以某种方式复制源代码。我们的目标是确保包的创建是完全可从源代码复制的,同时保证一个干净的构建。
如果你不想upload源代码的副本,你可以使用scm方法,它捕获坐标(url,commit),而不是做一个副本。尽管如此,它仍然会在Conan缓存中执行新的克隆/检出。目标是让事情完全
如果只想打包本地构建的最终二进制文件,可以使用conan export-pkg功能(请参阅this link)。但是这将不允许稍后构建包,例如自动添加新配置,并且不允许例如--build=missing

相关问题