多个 conanfile.py 管理
Multiple conanfile.py management
假设我在一个项目中有 2 个不同的 conanfile.py,我调用 conan install 两次来安装它们的依赖项。我在将它们添加到 cmake 时遇到了问题。
如果我使用基本设置
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
它只包括最新的。是否可以包含多个 conanbuildinfo.cmake 文件?
如果你有 2 个完全独立的项目,你可以有 2 个不同的 conanfile 并将生成的文件放在不同的文件夹中:
$ 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
生成器。
假设我在一个项目中有 2 个不同的 conanfile.py,我调用 conan install 两次来安装它们的依赖项。我在将它们添加到 cmake 时遇到了问题。
如果我使用基本设置
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
它只包括最新的。是否可以包含多个 conanbuildinfo.cmake 文件?
如果你有 2 个完全独立的项目,你可以有 2 个不同的 conanfile 并将生成的文件放在不同的文件夹中:
$ 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
生成器。