編譯功能要求

可以使用命令 target_compile_features 在目標上指定所需的編譯器功能 :

add_library(foo
    foo.cpp
)
target_compile_features(foo
    PRIVATE          # scope of the feature
    cxx_constexpr    # list of features
)

這些功能必須是 CMAKE_C_COMPILE_FEATURESCMAKE_CXX_COMPILE_FEATURES 的一部分 ; 否則,cmake 會報告錯誤。Cmake 會將任何必要的標誌(如 -std=gnu++11)新增到目標的編譯選項中。

在示例中,功能被宣告為 PRIVATE:需求將新增到目標,但不會新增到其使用者。要根據 foo 自動將需求新增到目標建築物,應使用 PUBLICINTERFACE 代替 PRIVATE

target_compile_features(foo
    PUBLIC    # this time, required as public
    cxx_constexpr
)

add_executable(bar
    main.cpp
)
target_link_libraries(bar
    foo       # foo's public requirements and compile flags are added to bar
)