第十二讲 打包Debug 及Release
注意: 本实例仅对单配置生成器有效,对多配置生成器无效(比如说Visual Studio)。
默认条件下,CMake的模型是一个build目录仅包含一个配置,它可以是Debug、Release、MinSizeRel或RelWithDebInfo。但是,设置CPack来绑定多个build目录,以构建同一工程的多个配置是可行的。
首先,我们需要确保debug和release所构建和使用的库具有不同的名字,可以用名字前缀来区分。
在顶层 CMakeLists.txt文件中,设置
CMAKE_DEBUG_POSTFIX :
CMakeLists.txt
set(CMAKE_DEBUG_POSTFIX d)
add_library(tutorial_compiler_flags INTERFACE)
还有,为tutorial 添加 DEBUG_POSTFIX 属性:
CMakeLists.txt
add_executable(Tutorial tutorial.cxx)
set_target_properties(Tutorial PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)
为MathFunctions
库也加上版本号。在MathFunctions/CMakeLists.txt
, 设置 VERSION 和SOVERSION 属性:
MathFunctions/CMakeLists.txt
set_property(TARGET MathFunctions PROPERTY VERSION "1.0.0")
set_property(TARGET MathFunctions PROPERTY SOVERSION "1")
在 Step12
目录下,创建两个子目录,分别命名为debug
和release
。目录层级变成:
- Step12 - debug - release
现在,我们需要分别设置debug和release的工程环境。我们可以用 CMAKE_BUILD_TYPE 属性来区分:
cd debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build .
cd ../release
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
现在,debug 和release的工程目录已经准备好了,我们可以用一个自定义配置文件来封装不同的工程配置。在Step12
目录下创建一个文件,命名为 MultiCPackConfig.cmake
。在这个文件里,首先引用 cmake 所创建的文件。
接下来,用CPACK_INSTALL_CMAKE_PROJECTS
变量指定具体安装 的工程,在本例中,我们同时安装 debug 和release版本。
MultiCPackConfig.cmake
include("release/CPackConfig.cmake")
set(CPACK_INSTALL_CMAKE_PROJECTS
"debug;Tutorial;ALL;/"
"release;Tutorial;ALL;/"
)
在Step12
目录下,执行 cpack ,通过config
选项来指定自定义配置集。
cpack --config MultiCPackConfig.cmake