rus*_*a91 1 c++ makefile cmake c++11 c++14
我正在使用两个库:
现在,我在第一个库中创建了一个测试用例(因为这里更简单),其中我使用了两个库的头文件.当我编译时使用
使
对于线条
decltype(自动)...
我收到以下两条错误消息:
错误:'auto'之前的预期primary-expression
错误:'decltype'之前的预期unqualified-id
这些行来自第二个库的一些.cpp文件,当我编译第二个库的示例(在其中定义)时,这些错误不会出现.所以我认为解决方案是将第一个库的-std = c ++ 11更改为-std = c ++ 1y,因为这是两个库之间标志的唯一区别.
假设我的想法可能是正确的......显然在第一个库中,源目录中有很多CMake文件,我有点害怕在一切都不起作用之前更改配置.而且我没有安装库,一个人为我安装了它.通常我在哪里可以找到CXX_FLAGS变量?在添加-std = c ++ 14后,我应该重新安装库还是足够的'make'来编译我的测试用例?
我知道可能缺少许多信息,但这是我第一次使用复杂的库来处理CMake.
假设您的库已经编译,您需要为您的测试项目启用c ++ 14功能.执行此操作的简单方法是使用(或通过命令行)将-std=c++1y
or或-std=c++14
(取决于您的编译器)添加到CMAKE_CXX_FLAGS
变量中.cmake-gui
ccmake
但更好的方法是使用cmake的target_compile_features
命令(参见此处的文档).它允许您定义要在代码中使用的功能,CMake会相应地设置编译器标志.因此,在您的情况下,target_compile_features(mylib cxx_decltype_auto)
在您的CMakeLists.txt
文件中添加命令(mylib
您使用add_library
或添加的目标的名称add_executable
).