将 CMAKE_CXX_FLAGS 传递给 target_compile_options

Pass CMAKE_CXX_FLAGS to target_compile_options

我正在尝试将所有原始 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 ...),可以吗?

提前致谢!

这可能是因为 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 不太可能在长 运行 中引起麻烦)并始终使用正确的字符串分隔符。