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

dro*_*dri 12 c++ cmake c++11

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

target_compile_features(my_header_lib INTERFACE cxx_range_for)
Run Code Online (Sandbox Code Playgroud)

但我不想指出个别功能,而只需要C++ 11或C++ 14.然后我可以尝试使用以下内容:

set_property(TARGET my_target PROPERTY CXX_STANDARD 11)
Run Code Online (Sandbox Code Playgroud)

问题是my_target不能在这里进行INTERFACE,它不受支持,并且我无法将其定义为PUBLIC,因此我的头文件库的消费者(许多EXE)将自动从lib传播C++ 11配置.

是否有某种方法可以在11/14的高级别标准中定义,还可以将其配置为仅限标题(INTERFACE)库?我宁愿不回到旧手册-std = c ++ 11.

Eri*_*und 8

CMake 3.8(2017年4月发布)引入了元功能(例如cxx_std_11,cxx_std_14,cxx_std_17).你现在可以写一下:

target_compile_features(my_header_lib INTERFACE cxx_std_11)
Run Code Online (Sandbox Code Playgroud)