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

时间:2018-02-01 17:19:33

标签: c visual-c++ cmake compiler-options

我正在开发一个CMakeLists.txt具有以下内容的C项目:

set_property(
    TARGET foo
    APPEND PROPERTY COMPILE_OPTIONS -Wall
)

只要我可以假设编译器是gcc或clang,这是我没假的。但是 - 对于MSVC,-Wall表示http://www.healthintersections.com.au/?p=2487并且不受欢迎,所以我想设置其他开关。我怎么能/我应该怎么做呢?

注意:我不是要求使用哪些编译器选项,我要求如何使用CMake应用我的标志(或任何其他属性)选项。

2 个答案:

答案 0 :(得分: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 :(得分: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>
)