将 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
不太可能在长 运行 中引起麻烦)并始终使用正确的字符串分隔符。
我正在尝试将所有原始 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
不太可能在长 运行 中引起麻烦)并始终使用正确的字符串分隔符。