假设我在一个项目中有 2 个不同的 conanfile.py,我调用 conan install 两次来安装它们的依赖项。我在将它们添加到 cmake 时遇到了麻烦。
如果我使用基本设置
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
它只包括最新的一个。是否可以包含多个 conanbuildinfo.cmake 文件?
如果您有 2 个完全独立的项目,则可以有 2 个不同的 conanfiles 并将生成的文件放在不同的文件夹中:
$ conan install conanfile1.py --install-folder=folder1
$ conan install conanfile2.py --install-folder=folder2
然后在您的第一个项目中:
include(<...>/folder1/conanbuildinfo.cmake)
conan_basic_setup()
在你的第二个项目中:
include(<...>/folder2/conanbuildinfo.cmake)
conan_basic_setup()
您需要定义一些一致的约定来定位每个项目的生成文件。
但是请注意,如果打算将不同的模块一起使用,例如最近链接在一起,如果您不使用相同的依赖项和相同的版本,您可能会在全局应用程序中遇到链接或运行时错误。如果模块是相关的,并且您想使用相同版本的依赖项,那么您肯定只想使用 1 个包含所有依赖项的 conanfile。
请注意,即使您只使用 1 个 conanfile,也有不同的方法来定义您想要的特定依赖项:
cmake生成器的目标:include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)```
add_library(mylib1 ... <sources>)
target_link_libraries(mylib1 PUBLIC CONAN_PKG::Dep1 CONAN_PKG::Dep2)
add_library(mylib2 ... <sources>)
target_link_libraries(mylib2 PUBLIC CONAN_PKG::Dep3 CONAN_PKG::Dep4)
cmake_find_package还为依赖图中的每个包生成一个findXXXX.cmake文件。您可以使用find_package(XXXX)和以后的结果,指定不同的依赖项。推荐使用cmake_find_package_multi发电机。