第十二讲 打包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