c++ - Qt 5.7 将 -std=gnu++11 添加到我的编译器标志,破坏 -std=c++14

标签 c++ qt c++11 cmake c++14

我在我的 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_REQUIREDCXX_EXTENSIONS也可以用于每个目标的配置。
有关详细信息,请参阅上面的链接。

关于c++ - Qt 5.7 将 -std=gnu++11 添加到我的编译器标志,破坏 -std=c++14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795474/

相关文章:

c++ - 可以删除继承的成员或阻止继承某些属性/方法吗?

c++ - 混合松弛和释放-获取内存指令

c++ - FFMPEG: ‘PIX_FMT_BGR24’ 未在此范围内声明

c++ - 在 C++ 中,在不改变程序流程的情况下使用 'else' 对性能有何重要性?

css - 未读数据的 QTabBar 选择器

c++ - 实例化重载函数模板

c++ - glutPassiveMotionFunc 问题

c++ - 当我尝试用 makefile 编译我的 qt 程序时它不起作用

c++ - setChecked() 在类里面不起作用

c++ - 使用 shared_ptr 和 unique_ptr 指向数组时的区别?