【发布时间】:2017-04-29 07:26:00
【问题描述】:
我有一个依赖于 Boost 库(和其他)的项目。我创建了一个 CMakeLists 来使用 ExternalProject_Add 自动下载和编译依赖项。
我想支持多配置(发布和调试)。因此,对于我的其他库,我在 CMakeLists 的开头定义了 CMAKE_BUILD_TYPE。我在ExternalProject_Add 命令中通过-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} 的依赖关系传播它。
它在 Windows 和 Linux 上运行良好。
然而,对于 Boost,根据我需要使用 variant=debug 或 variant=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 ""
)
【问题讨论】:
标签: c++ visual-studio boost cmake multi-configuration