首页 文章

使用CMake设置特定于平台的/特定于编译器的目标属性

提问于
浏览
0

我正在研究一个C项目,其中 CMakeLists.txt 具有以下内容:

set_property(
    TARGET foo
    APPEND PROPERTY COMPILE_OPTIONS -Wall
)

只要我可以假设编译器将是gcc或clang,这是我没假的 . 但是 - 对于MSVC, -Wall 表示something else并且不合需要,所以我想设置其他开关 . 我怎么能/我应该怎么做呢?

注意:我不是要问使用哪个编译器选项,我问的是如何使用CMake应用我对标志(或任何其他属性)的选择 .

2 回答

  • 4

    一种方法可能是行:

    if ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
      set_property(TARGET foo APPEND PROPERTY COMPILE_OPTIONS -Wall)
    elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
      set_property(TARGET foo APPEND PROPERTY COMPILE_OPTIONS -Wall)
    elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
      set_property(TARGET foo APPEND PROPERTY COMPILE_OPTIONS /W3)
    

    并且编译器ID列表是here .

  • 1

    另一种方法是使用target_compile_optionsgenerator expression . 对于前者

    add_library(foo foo.cpp)
    target_compile_options(foo
        PRIVATE
            $<$<CXX_COMPILER_ID:MSVC>:/W3>
            $<$<CXX_COMPILER_ID:Clang>:-Wall>
            $<$<CXX_COMPILER_ID:GNU>:-Wall>
    )
    

相关问题