我正在开发一个CMakeLists.txt
具有以下内容的C项目:
set_property(
TARGET foo
APPEND PROPERTY COMPILE_OPTIONS -Wall
)
只要我可以假设编译器是gcc或clang,这是我没假的。但是 - 对于MSVC,-Wall
表示http://www.healthintersections.com.au/?p=2487并且不受欢迎,所以我想设置其他开关。我怎么能/我应该怎么做呢?
注意:我不是要求使用哪些编译器选项,我要求如何使用CMake应用我的标志(或任何其他属性)选项。
答案 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_options与generator 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>
)