我正在使用两个库:
现在,我在第一个库中创建了一个测试用例(因为这里更简单),我在其中使用了两个库的头文件。当我使用
编译时请
对于带
的行decltype(自动)......
我收到以下两条错误消息:
错误:在' auto'
之前预期的primary-expression错误:在'decltype'之前预期的不合格ID
这些行来自第二个库的某些.cpp文件,当我编译第二个库的示例(在其中定义)时,这些错误不会出现。所以我认为解决方案是将第一个库的-std = c ++ 11更改为-std = c ++ 1y,因为这是两个库之间标志的唯一区别。
假设我的想法可能是正确的......显然在第一个库中,源目录中有很多CMake文件,我有点害怕在一切都不起作用之前更改配置。而且我没有安装库,一个人为我安装了它。通常我在哪里可以找到CXX_FLAGS变量?在添加-std = c ++ 14后,我应该重新安装库还是足够的' make'在哪里编译我的测试用例?
我知道可能缺少许多信息,但这是我第一次使用复杂的库来处理CMake。
答案 0 :(得分:5)
假设您的库已经编译,您需要为您的测试项目启用c ++ 14功能。执行此操作的简单方法是使用-std=c++1y
(或通过命令行{{}将-std=c++14
或CMAKE_CXX_FLAGS
(取决于您的编译器)添加到cmake-gui
变量中1}})。
更好的方法是使用cmake的ccmake
命令(有关文档,请参阅here)。它允许您定义要在代码中使用的功能,CMake会相应地设置编译器标志。因此,在您的情况下,请在target_compile_features
文件中添加target_compile_features(mylib cxx_decltype_auto)
命令(CMakeLists.txt
是您使用mylib
或add_library
添加的目标的名称。
答案 1 :(得分:0)
我假设您编译了两个库,然后编译了exe
add_library(libA ...)
target_compile_features(libA
PUBLIC
# Or whatever the features that the headers of this one needs
cxx_variadic_templates
)
add_library(libB ...)
target_compile_features(libB
PUBLIC cxx_decltype_auto
)
add_executable(myexe ...)
# CMake will compute the correct flag to use.
target_link_libraries(myexe libA libB)
https://cmake.org/cmake/help/v3.3/manual/cmake-compile-features.7.html
请参阅:What INTERFACE, PUBLIC, PRIVATE mean in cmake target compilation setting?