【问题标题】:Setting platform-specific / compiler-specific target properties with CMake使用 CMake 设置特定于平台/特定于编译器的目标属性
【发布时间】:2018-02-01 17:19:33
【问题描述】:

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

set_property(
    TARGET foo
    APPEND PROPERTY COMPILE_OPTIONS -Wall
)

这很好,只要我可以假设编译器是 gcc 或 clang,这是我假设的。但是 - 对于 MSVC,-Wall 意味着 something else 并且不受欢迎,所以我想设置其他开关。我该怎么做/我应该怎么做?

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

【问题讨论】:

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


【解决方案1】:

一种方法可能是行:

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

【讨论】:

    【解决方案2】:

    另一种方法是将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>
    )
    

    【讨论】:

    • 错字:',' -> ':'
    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多