CMake使库需要cxx标准

时间:2017-10-05 19:34:13

标签: c++ c++11 cmake c++14

我尝试让我的库目标依赖于c ++ 14。如何实现,链接到我的库目标的目标也依赖于c ++ 14?

我试图使用:

add_library(lib SHARED ${FILES})
target_compile_options(lib INTERFACE CXX_STANDARD 14)

这适用于构建库,但是当我尝试使用lib编译其他目标时,C ++ 14未激活。

我知道,还有其他方法,但我无法让它们发挥作用。即有:

set_target_properties()

这样做的原因是库头文件使用了广义的lambda捕获和模板别名,如std::remove_reference_t和类似的,这些都是自c ++ 14以来的标准库。

1 个答案:

答案 0 :(得分:2)

您正在寻找的内容(CMake版本> = 3.8)如下:

target_compile_features(lib PUBLIC cxx_std_14)

或者,对于3.1以上的CMake版本,通过明确指定所需的功能,f.i。:

target_compile_features(lib PUBLIC cxx_alias_templates)

您使用的语法不正确,无法设置所需的标准。作为旁注,我使用PUBLIC代替INTERFACE,因为你也想用C ++ 14编译库本身。

docs

中的更多详细信息