0

假设我在一个项目中有 2 个不同的 conanfile.py,我调用 conan install 两次来安装它们的依赖项。我在将它们添加到 cmake 时遇到了麻烦。

如果我使用基本设置

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

它只包括最新的一个。是否可以包含多个 conanbuildinfo.cmake 文件?

4

1 回答 1

2

如果您有 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发电机。
于 2020-03-21T15:33:39.513 回答