本文介绍了Qt 5.7添加-std = gnu ++ 11到我的编译器标志,clobbering -std = c ++ 14的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的 CMakeLists.txt

set(CMAKE_CXX_FLAGS "-std=c++14 -g -O0")

使用 find_package 找到 Qt5Test

find_package(Qt5Test REQUIRED)

然后我创建一个库

add_library          (modeltest STATIC ${SRCS})
target_link_libraries(modeltest Qt5::Test)

某些原因我得到 -fPIC -std = gnu ++ 11 添加到我的编译器标志

For some reason I'm getting -fPIC -std=gnu++11 added to my compiler flags

CMakeFiles/modeltest.dir/flags.make:CXX_FLAGS = -std=c++14 -g -O0 -fPIC -std=gnu++11

这破坏了我的 -std = c ++ 14 标志,导致所有的c ++ 14功能在我的程序,最终作为编译器错误:

This is clobbering my -std=c++14 flag, causing all the c++14 features in my program to end up as compiler errors:

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

    改为使用:

    Do not set CMAKE_CXX_FLAGS explicitly.
    Use this instead:

    set(CMAKE_CXX_STANDARD 14)
    

    设置用于每个目标的标准。

    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_CXX_EXTENSIONS OFF)
    

    查看链接了解更多详情。

    感谢@CraigScott指出了这一点。

    See this link for further details.
    Thanks to @CraigScott for that pointed it out.

    如@wasthishelpful的评论中所述,属性,和也可用于每个目标配置。

    有关详细信息,请参阅上面的链接。

    As mentioned in the comments by @wasthishelpful, properties CXX_STANDARD, CXX_STANDARD_REQUIRED and CXX_EXTENSIONS can also be used for a per-target configuration.
    See the links above for further details.

    这篇关于Qt 5.7添加-std = gnu ++ 11到我的编译器标志,clobbering -std = c ++ 14的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 16:36