gpt4 book ai didi

c++ - 使用 CMake 编译具有多配置的 Boost

转载 作者:行者123 更新时间:2023-11-30 03:32:08 26 4
gpt4 key购买 nike

我有一个依赖于 Boost 库(和其他库)的项目。我创建了一个 CMakeLists 以使用 ExternalProject_Add 自动下载和编译依赖项。

我想支持多配置(发布和调试)。因此,对于我的其他库,我在 CMakeLists 的开头定义了一个 CMAKE_BUILD_TYPE。我在 ExternalProject_Add 命令中使用 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} 依赖项传播它。

它在 Windows 和 Linux 上运行良好。

然而,对于 Boost,根据我需要使用 variant=debugvariant=release 进行编译的配置。我创建了一个 if(${CMAKE_BUILD_TYPE) MATCHES Debug) 语句并根据该要求设置变体。

对于 Linux 这很好用,但在 Windows 上它只有在我在 cmake 期间更改 CMAKE_BUILD_TYPE 变量时才有效。当我尝试更改 VS 中的配置时,它不会更改 CMAKE_BUILD_TYPE 变量。

是否可以在我的 CMakeLists 中检测到在 VS 中选择的配置?

谢谢。

#-----------------------------------------------------------------------------
# Boost
#-----------------------------------------------------------------------------

message(STATUS "Installing Boost library.")

set(BOOST_BOOTSTRAP_COMMAND)
if(WIN32)
set(BOOST_BOOTSTRAP_COMMAND bootstrap.bat)
set(BOOST_B2_COMMAND b2.exe)
elseif(UNIX )
set(BOOST_BOOTSTRAP_COMMAND ./bootstrap.sh)
set(BOOST_B2_COMMAND ./b2)
else()
# MacOSX
set(BOOST_BOOTSTRAP_COMMAND ./bootstrap.sh)
set(BOOST_B2_COMMAND ./b2)
endif()

set(BOOST_BUILD_TYPE variant=release)
if (${CMAKE_BUILD_TYPE} MATCHES Debug)
set(BOOST_BUILD_TYPE variant=debug)
endif(${CMAKE_BUILD_TYPE} MATCHES Debug)

set(BOOST_INSTALL_DIR ${PROJECT_BINARY_DIR}/deps/boost-install)
ExternalProject_Add(boost
SOURCE_DIR "${PROJECT_BINARY_DIR}/deps/boost"
BUILD_IN_SOURCE 1
GIT_REPOSITORY "${git_protocol}://github.com/boostorg/boost"
GIT_TAG "5ec478a570bdc71c5d4854e7165a8b3f4fa82ad9"
CONFIGURE_COMMAND ${BOOST_BOOTSTRAP_COMMAND}
BUILD_COMMAND ${BOOST_B2_COMMAND} headers COMMAND ${BOOST_B2_COMMAND} install
link=static
${BOOST_BUILD_TYPE}
--prefix=${BOOST_INSTALL_DIR}
--with-filesystem
--with-program_options
--with-system
--with-thread
-j8
INSTALL_COMMAND ""
)

最佳答案

运行 CMake 时,无法知道用户在使用多配置生成器(Visual Studio 或 Xcode)构建时将选择哪种构建类型。用户在 CMake 完成配置和生成阶段后做出选择(即在 cmake 命令完成后)。用户也可以构建多种构建类型,因此这些生成器不存在单一构建类型的概念。

一个选项可能是定义一个自定义命令,该命令将 boost 的相关构建作为构建时任务而不是使用 ExternalProject。这可能是最接近您似乎想要实现的目标。您仍然可以在 CMake 运行期间的配置时下载源代码,这是一种提到的技术 here以googletest为例。该答案提供了指向更详细的文章的链接,以及 github 上可用的完全通用的实现,这可能适合您的情况。

关于c++ - 使用 CMake 编译具有多配置的 Boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43692976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com