我尝试让我的库目标依赖于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以来的标准库。
答案 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。
中的更多详细信息