【问题标题】:How do I get CMake Tools to compile programs in Visual Studio Code with C++11 (or higher) features?如何让 CMake 工具在 Visual Studio Code 中编译具有 C++11(或更高版本)功能的程序?
【发布时间】:2020-04-18 16:34:49
【问题描述】:

总的来说,我是 CMake 的新手,所以希望我做错了一些简单的事情,但我正在努力寻找解决方案。我无法获得 CMake 工具来编译带有 c++11(或更高功能)的琐碎程序。理想情况下,我想启用 c++17。

例如,如果我的整个 main() 函数是

int main(int, char**) 
{
    auto number{9};

    return 0;
}

我在尝试构建时收到以下 2 个错误和 1 个警告:

error: declaration of variable 'number' with deduced type 'auto' requires an initializer

error: expected ';' at end of declaration

warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]

我的 VSCode C++ 设置设置为 C++17 标准,当我编写代码时,我没有收到任何 Intellisense 错误或警告,就在我尝试 build 使用 CMake 工具扩展。

我还尝试将以下内容添加到我的 CMakeLists.txt 文件中:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

我错过了什么?非常感谢!

平台和版本

操作系统:macOS High Sierra 10.13.6

CMake 版本:3.16.2

VSCode 版本:1.41.1

CMake 工具扩展版本:1.2.3

编译器/工具链:Clang 10.0.0

【问题讨论】:

  • 请显示您的CMakeLists.txt文件的内容
  • 试试target_compile_features(your_project PUBLIC cxx_std_17)
  • 尝试以高详细度构建,以便查看实际使用了哪些编译器标志。
  • 你试过set(CMAKE_CXX_EXTENSIONS ON)吗?错误消息确实说它是一个扩展...

标签: c++ c++11 visual-studio-code cmake c++17


【解决方案1】:

想通了,我怀疑这是一个简单的错误并修复。

最初,我的 CMakeLists.txt 文件如下所示:

cmake_minimum_required(VERSION 3.0.0)
project(JRPG VERSION 0.1.0)

include(CTest)
enable_testing()

add_executable(JRPG main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

当我将底部的三行移到项目名称和版本行(见下文)的正下方时,构建按预期工作。我还不知道为什么会这样,但我相信随着我深入研究文档,我会很快弄清楚。谢谢!

cmake_minimum_required(VERSION 3.0.0)
project(JRPG VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include(CTest)
enable_testing()

add_executable(JRPG main.cpp)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-28
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多