我在我的 CMakeLists.txt
set(CMAKE_CXX_FLAGS "-std=c++14 -g -O0")
然后我使用 find_package
找到 Qt5Test
find_package(Qt5Test REQUIRED)
然后我正在创建一个 Model Test图书馆
add_library (modeltest STATIC ${SRCS})
target_link_libraries(modeltest Qt5::Test)
出于某种原因,我将 -fPIC -std=gnu++11
添加到我的编译器标志中
CMakeFiles/modeltest.dir/flags.make:CXX_FLAGS = -std=c++14 -g -O0 -fPIC -std=gnu++11
这破坏了我的 -std=c++14
标志,导致我程序中的所有 c++14 功能最终都变成了编译器错误:
error: ‘foo’ function uses ‘auto’ type specifier without trailing return type
constexpr auto foo()
^
note: deduced return type only available with -std=c++14 or -std=gnu++14
- 有办法解决这个问题吗?
- 我使用的是今天从他们网站下载的最新版 Qt 5.7
最佳答案
不要显式设置CMAKE_CXX_FLAGS
。
改用这个:
set(CMAKE_CXX_STANDARD 14)
这肯定会为每个目标设定标准。
正如评论中所建议的,还应考虑以下内容:
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
参见 this链接以获取更多详细信息。
感谢@CraigScott 指出这一点。
正如@wasthishelpful 在评论中提到的,属性 CXX_STANDARD
, CXX_STANDARD_REQUIRED
和 CXX_EXTENSIONS
也可以用于每个目标的配置。
有关详细信息,请参阅上面的链接。
关于c++ - Qt 5.7 将 -std=gnu++11 添加到我的编译器标志,破坏 -std=c++14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795474/