将 CMAKE_CXX_FLAGS 传递给 target_compile_options
Posted
技术标签:
【中文标题】将 CMAKE_CXX_FLAGS 传递给 target_compile_options【英文标题】:Pass CMAKE_CXX_FLAGS to target_compile_options 【发布时间】:2015-02-02 17:04:51 【问题描述】:我正在尝试将所有原始 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 ...)
,可以吗?
提前致谢!
【问题讨论】:
【参考方案1】:这可能是因为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的主要内容,如果未能解决你的问题,请参考以下文章
为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?
我可以阻止 GoogleTest-build 修改全局 CMAKE_CXX_FLAGS 变量吗?