c++ cmake編譯如何支持多目標(biāo)構(gòu)建

c++
小樊
86
2024-09-27 17:52:46

在C++中,使用CMake進(jìn)行多目標(biāo)構(gòu)建主要涉及到指定不同的構(gòu)建目標(biāo)以及為這些目標(biāo)配置相應(yīng)的編譯選項(xiàng)。以下是一個(gè)基本的步驟指南,幫助你實(shí)現(xiàn)多目標(biāo)構(gòu)建:

  1. 創(chuàng)建CMakeLists.txt文件

    首先,確保你的項(xiàng)目根目錄下有一個(gè)CMakeLists.txt文件。這個(gè)文件是CMake構(gòu)建系統(tǒng)的核心配置文件。

  2. 定義目標(biāo)

    CMakeLists.txt文件中,你可以使用add_executable()add_library()函數(shù)來(lái)定義不同的構(gòu)建目標(biāo)。例如:

    add_executable(target1 main.cpp file1.cpp)
    add_library(target2 STATIC file2.cpp)
    add_library(target3 SHARED file3.cpp)
    

    這里我們定義了三個(gè)目標(biāo):target1是一個(gè)可執(zhí)行文件,target2是一個(gè)靜態(tài)庫(kù),target3是一個(gè)共享庫(kù)。

  3. 配置編譯選項(xiàng)

    你可以為每個(gè)目標(biāo)單獨(dú)配置編譯選項(xiàng)。例如,你可以使用target_compile_options()函數(shù)為特定目標(biāo)設(shè)置編譯選項(xiàng):

    target_compile_options(target1 PRIVATE -Wall -Werror)
    target_compile_options(target2 PUBLIC -fPIC)
    target_compile_options(target3 PUBLIC -fPIC -shared)
    

    在這個(gè)例子中,target1啟用了警告和錯(cuò)誤檢查,target2被配置為生成位置無(wú)關(guān)代碼(PIC),而target3被配置為生成共享庫(kù)。

  4. 設(shè)置構(gòu)建目錄(可選):

    如果你希望為每個(gè)目標(biāo)創(chuàng)建單獨(dú)的構(gòu)建目錄,以便更好地組織源代碼和生成的二進(jìn)制文件,你可以使用set_target_properties()函數(shù):

    set_target_properties(target1 PROPERTIES build_directory build/target1)
    set_target_properties(target2 PROPERTIES build_directory build/target2)
    set_target_properties(target3 PROPERTIES build_directory build/target3)
    

    這將在項(xiàng)目根目錄下創(chuàng)建build/target1、build/target2build/target3等子目錄,并在這些目錄中進(jìn)行構(gòu)建。

  5. 運(yùn)行CMake并構(gòu)建目標(biāo)

    在項(xiàng)目根目錄下,運(yùn)行以下命令來(lái)配置構(gòu)建系統(tǒng)并構(gòu)建指定的目標(biāo):

    cmake -S . -B build --target target1
    cmake --build build --target target1
    

    這里,-S .指定源代碼目錄,-B build指定構(gòu)建目錄,--target target1指定要構(gòu)建的目標(biāo)。

通過(guò)遵循這些步驟,你可以在CMake中配置并構(gòu)建多個(gè)目標(biāo),每個(gè)目標(biāo)都可以有自己的編譯選項(xiàng)和構(gòu)建目錄。這有助于保持源代碼目錄的整潔,并使構(gòu)建過(guò)程更加模塊化和可管理。

0