如何在Conan 2.0中指定非源码根目录的CMakeLists.txt路径?
在Conan Recipe中指定CMakeLists.txt的路径
当你的CMakeLists.txt不在源码根目录时,可通过以下两种方式在Conan Recipe中指定其路径:
方式1:直接在build()方法中设置source_folder
在conanfile.py的build()函数里,给CMake实例指定目标子文件夹路径:
from conans import ConanFile, CMake # Conan 1.x # 若用Conan 2.x则替换为:from conan import ConanFile; from conan.tools.cmake import CMake class YourRecipeConan(ConanFile): # 此处保留你的其他配置(name, version, settings等) def build(self): cmake = CMake(self) # 指定CMakeLists.txt所在的相对路径 cmake.source_folder = "src/cmakelistsfolder" cmake.configure() cmake.build()
或者更简洁地在configure()时直接传入参数:
def build(self): cmake = CMake(self) cmake.configure(source_folder="src/cmakelistsfolder") cmake.build()
方式2:使用CMakeToolchain(Conan 2.x推荐)
对于Conan 2.x,推荐通过CMakeToolchain传递配置,确保兼容性和可扩展性:
from conan import ConanFile from conan.tools.cmake import CMake, CMakeToolchain class YourRecipeConan(ConanFile): # 你的其他配置项 def generate(self): tc = CMakeToolchain(self) # 设置CMake源码目录为目标子文件夹 tc.variables["CMAKE_SOURCE_DIR"] = f"{self.source_folder}/src/cmakelistsfolder" tc.generate() def build(self): cmake = CMake(self) cmake.configure() cmake.build()
关键说明
- 上述路径均为相对于Conanfile所在源码根目录的相对路径
- Conan 1.x和2.x的API略有差异,注意导入语句的对应关系
- 本质都是告诉CMake工具链去哪里查找
CMakeLists.txt文件
内容的提问来源于stack exchange,提问作者Hans123
相关产品推荐
相关产品推荐

