c++ - 如何在 Cmake 中定义传递 CXX_STANDARD C++11

标签 c++ c++11 cmake

我有一个只有头文件的 C++11 库,所以我想配置它,使用 CMake > 3.1,编译功能似乎是合理的做法:

target_compile_features(my_header_lib INTERFACE cxx_range_for)

但我宁愿不必指明单个特性,而只需指明 C++11 或 C++14。然后我可以尝试使用以下内容:

set_property(TARGET my_target PROPERTY CXX_STANDARD 11)

问题是 my_target 在这里不能是 INTERFACE,它不受支持,并且我不能将它定义为 PUBLIC,因此我的仅 header 库的使用者(许多 EXE)将自动从该库传播 C++11 配置。

是否有某种方法可以在高级别的 11/14 标准上定义,但也可以为仅 header (接口(interface))库配置它?我不希望回到旧手册 -std=c++11。

最佳答案

CMake 3.8 (2017 年 4 月发布)引入了元功能(例如 cxx_std_11cxx_std_14cxx_std_17)。例如,您现在可以编写:

target_compile_features(my_header_lib INTERFACE cxx_std_11)

关于c++ - 如何在 Cmake 中定义传递 CXX_STANDARD C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687331/

相关文章:

cflags '-Wl,-export-dynamic' 与链接器标志 '-export-dynamic'

c++ - 计算 C 数组中三元组的频率以进行索引

c++ - 在 C++0x 中传递/移动构造函数的参数

c++ - 调用重载的 ‘<brace-enclosed initializer list>’ 与 suffices forpair 是不明确的

xcode - 在Mac上安装OpenCV错误

android - 在 build.gradle 文件的 externalNativeBuild 中指定目标-> 没有方法签名

c++ - Case 语句不执行

c++ - 如何在 C++ 中使用正则表达式换行后不捕获空格

c++ - 变量名的长度是否会产生任何与性能或效率相关的问题?

c++ - 对于双映射