问题描述
我正在使用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