将构建配置从cmake链接切换到Boost库的正确版本

问题描述

我正在使用Cmake来构建我的C ++项目,并且正在使用柯南来维护我的boost库。 我的conanfile.txt非常简单,

@MethodSource

从柯南安装boost时,可以使用以下命令,

[requires]
boost/1.71.0@conan/stable

[generators]
cmake

或者,

conan install ..

这两个命令都将bost库安装在C:/。conan文件夹的两个不同文件夹中。

在CMakeLists.txt中,我有以下几行来查找增强

conan install .. -s build_type=Debug

但是,当我配置cmake时,

set(Boost_USE_STATIC_LIBS       ON) 
set(Boost_USE_DEBUG_LIBS        ON)
set(Boost_USE_RELEASE_LIBS      OFF)
set(Boost_USE_MULTITHREADED     ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost required COMPONENTS program_options)

它没有找到Boost库的调试版本。它总是表明它指向发行版本。很自然,下面的命令有效,

cmake .. -DBoost_DEBUG=ON

但是,以下命令失败,

cmake --build . --config Release

,因为它仍在尝试链接发行版本。

如何重新配置​​cmake和conan设置,以便可以在调试版本和发行版本之间轻松切换?有什么建议吗?

干杯, M

解决方法

如果要使用find_package(Boost)使用库,则需要生成相应的文件。使用cmake_find_package生成器(调试和发布需要不同的文件夹)或cmake_find_package_multi生成器(Debug和Release都可以位于同一文件夹中)。只需将它们添加到您的conanfile.txt

[requires]
boost/1.71.0

[generators]
cmake_find_package_multi

现在,您可以从命令行调用CMake,但是您需要告诉在哪里可以找到生成的FindBoost.cmake文件(如果您使用的是 multi ,则可以告诉BoostConfig.cmake >生成器):

cmake .. -DCMAKE_MODULE_PATH=<path/to/dir/with/findcmake> [...more arguments]

请考虑到,如果您没有使用cmake生成器和对conan_basic_setup的调用,则需要确保用于构建从柯南获得的Boost二进制文件的配置匹配用于构建项目的一个(否则可能会出现链接器错误)。

,

如果您还没有使用,我建议您使用https://github.com/conan-io/cmake-conan,它可以使某些地区的生活更加轻松。

除非您希望能够在没有柯南的情况下构建项目,否则实际上不需要将find_package与柯南一起使用。参见https://docs.conan.io/en/latest/integrations/build_system/cmake/cmake_generator.html。您可以使用:

conan_basic_setup()

target_link_libraries(<target> ${CONAN_LIBS})

或者:

conan_basic_setup(TARGETS)

target_link_libraries(<target>CONAN_PKG::boost)

如果要使用find_package,则需要使用cmake_find_package generator 并将以下内容添加到conanfile.txt中:

[generators]
cmake_find_package
cmake_paths