我有一个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
的方法,ConanFile
的source_folder
等属性已经引用了这些缓存文件夹,而不是原始文件夹**。还要注意,conan也在这些缓存文件夹中复制conanfile.py
,__file__
的路径也给出了这些缓存文件夹。
- Conan缓存文件夹:Conan创建自己的临时文件夹来工作:构建、来源、导出等。在
因此,在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
1条答案
按热度按时间piah890a1#
通过
conan create
在Conan缓存中构建的代码总是以某种方式复制源代码。我们的目标是确保包的创建是完全可从源代码复制的,同时保证一个干净的构建。如果你不想upload源代码的副本,你可以使用
scm
方法,它捕获坐标(url,commit),而不是做一个副本。尽管如此,它仍然会在Conan缓存中执行新的克隆/检出。目标是让事情完全如果只想打包本地构建的最终二进制文件,可以使用
conan export-pkg
功能(请参阅this link)。但是这将不允许稍后构建包,例如自动添加新配置,并且不允许例如--build=missing
。