我正在尝试将所有原始CMAKE_CXX_FLAGS
作为参数传递给target_compile_options
函数。
的CMakeLists.txt
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=c++0x -Wall -pedantic -Werror -Wextra)
# I'd wish this target_compile_options
target_compile_options(my_target INTERFACE ${CMAKE_CXX_FLAGS})
这给了我一个错误:
g++.exe: error: -std=c++0x -Wall -pedantic -Werror -Wextra: No such file or directory
我知道一个简单的解决方案是:
target_compile_options(my_target INTERFACE -std=c++0x -Wall -pedantic -Werror -Wextra)
但是我想保留原来的SET(CMAKE_CXX_FLAGS ...)
,是否可能?
提前致谢!
答案 0 :(得分:6)
这可能是由于CMAKE_CXX_FLAGS
期望单个字符串(参数用空格分隔)而target_compile_options
使用list(参数用分号分隔)。
快速入侵,您可以尝试使用string
命令以分号分隔所有空格:
# this will probably break if you omit the "s
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall -pedantic -Werror -Wextra")
string(REPLACE " " ";" REPLACED_FLAGS ${CMAKE_CXX_FLAGS})
target_compile_options(my_target INTERFACE ${REPLACED_FLAGS})
请注意,在现实世界中,您绝不希望同时设置CMAKE_CXX_FLAGS
和设置target_compile_options
。您应该坚持使用一种方法(根据我的经验target_compile_options
从长远来看不太可能造成麻烦)并在整个过程中使用正确的字符串分隔符。