步驟 12:封裝除錯與發行

注意: 此範例適用於單一組態產生器,不適用於多組態產生器(例如 Visual Studio)。

預設情況下,CMake 的模型是一個建置目錄僅包含單一組態,無論是除錯 (Debug)、發行 (Release)、最小尺寸發行 (MinSizeRel) 或帶除錯資訊的發行 (RelWithDebInfo)。然而,可以設定 CPack 來捆綁多個建置目錄,並建立一個包含相同專案多個組態的套件。

首先,我們要確保除錯和發行版本對於將要安裝的函式庫使用不同的名稱。讓我們使用 d 作為除錯函式庫的後綴。

在最上層的 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 中,設定 VERSIONSOVERSION 屬性

MathFunctions/CMakeLists.txt
set_property(TARGET MathFunctions PROPERTY VERSION "1.0.0")
set_property(TARGET MathFunctions PROPERTY SOVERSION "1")

Step12 目錄中,建立 debugrelease 子目錄。配置將如下所示

- Step12
   - debug
   - release

現在我們需要設定除錯和發行建置。我們可以使用 CMAKE_BUILD_TYPE 來設定組態類型

cd debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build .
cd ../release
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

現在除錯和發行建置都已完成,我們可以利用自訂的組態檔,將這兩個建置封裝到單一發行版本中。在 Step12 目錄中,建立一個名為 MultiCPackConfig.cmake 的檔案。在這個檔案中,首先包含由 cmake 可執行檔建立的預設組態檔。

接下來,使用 CPACK_INSTALL_CMAKE_PROJECTS 變數來指定要安裝的專案。在此範例中,我們要安裝除錯和發行版本。

MultiCPackConfig.cmake
include("release/CPackConfig.cmake")

set(CPACK_INSTALL_CMAKE_PROJECTS
    "debug;Tutorial;ALL;/"
    "release;Tutorial;ALL;/"
    )

Step12 目錄中,執行 cpack,並使用 config 選項指定我們的自訂組態檔

cpack --config MultiCPackConfig.cmake