这有什么问题:
if(CMAKE_COMPILER_IS_GNUCXX OR MINGW OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
add_compile_options("$<$<CONFIG:RELEASE>:-W -Wall -O3 -pedantic>")
add_compile_options("$<$<CONFIG:DEBUG>:-W -Wall -O0 -g -pedantic>")
endif()
我明白了:
g++: error: unrecognized command line option ‘-W -Wall -O3 -pedantic’
如果我这样说就可以了:
if(CMAKE_COMPILER_IS_GNUCXX OR MINGW OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
add_compile_options("$<$<CONFIG:RELEASE>:-W>")
add_compile_options("$<$<CONFIG:RELEASE>:-Wall>")
add_compile_options("$<$<CONFIG:RELEASE>:-O3>")
add_compile_options("$<$<CONFIG:RELEASE>:-pedantic>")
add_compile_options("$<$<CONFIG:DEBUG>:-W>")
add_compile_options("$<$<CONFIG:DEBUG>:-Wall>")
add_compile_options("$<$<CONFIG:DEBUG>:-g>")
add_compile_options("$<$<CONFIG:DEBUG>:-O0>")
add_compile_options("$<$<CONFIG:DEBUG>:-pedantic>")
endif()
......但我猜这不是那样......
答案 0 :(得分:3)
与包含带有选项的单个字符串的 CMAKE_CXX_FLAGS 变量不同,命令add_compile_options
接受分隔的参数每个选择。也就是说,没有生成器表达式,正确的用法是:
add_compile_options("-W" "-Wall" "-O3" "-pedantic")
因此,如果您想使用生成器展示,则需要将其附加到每个选项,就像您第二次尝试一样。
如果您有许多每个配置选项,并且您发现 manual 重复每个tedios的生成器表达式,您可以创建一个简单的函数,为您执行此操作。像这样:
# add_compile_options_config(<CONFIG> <option> ...)
function(add_compile_options_config CONFIG)
foreach(opt ${ARGN})
add_compile_options("$<$<CONFIG:${CONFIG}>:${opt}>")
endforeach()
endfunction()
用法:
add_compile_options_config(RELEASE "-W" "-Wall" "-O3" "-pedantic")
add_compile_options_config(DEBUG "-W" "-Wall" "-O0" "-g" "-pedantic")
如果要将项目中的“-W”,“ - O3”等编译器选项添加到所有目标,但是采用特定于配置的方式,请考虑使用 CMAKE_CXX_FLAGS_&lt; CONFIG&gt; 变量:
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -W -Wall -03 -pedantic")
答案 1 :(得分:2)
我试试了你的例子,可以重现你的问题:
c++: error: unrecognized command line option ‘-W -Wall -O3 -pedantic’
add_compile_options()
命令将参数作为选项列表,因此您必须使用;
作为分隔符。
以下内容适用于我的gcc
/ make
环境:
add_compile_options("$<$<CONFIG:RELEASE>:-W;-Wall;-O3;-pedantic>")
add_compile_options("$<$<CONFIG:DEBUG>:-W;-Wall;-O0;-g;-pedantic>")
或者写成:
string(
APPEND _opts
"$<$<CONFIG:RELEASE>:-W;-Wall;-O3;-pedantic>"
"$<$<CONFIG:DEBUG>:-W;-Wall;-O0;-g;-pedantic>"
)
add_compile_options("${_opts}")
<强>参考强>