【问题标题】:How do I avoid having to type -std=c++11 each time when compiling如何避免每次编译时都必须键入 -std=c++11
【发布时间】:2019-11-27 02:50:10
【问题描述】:

解决方案:我使用了Sander De Dycker 的解决方案,刚刚更新了我的 gcc 版本,效果很好。

首先,我想指出我对 CMake 或 shell 脚本一无所知。

在编译 C++ 文件时,避免每次都输入 -std=c++11 的最佳方法是什么

(例如 g++ -std=c++11 file.c)。

  • 我在网上找到了一个解决方案,但似乎没有用或者我不知道如何正确使用它:

    https://github.com/openalpr/openalpr/issues/528

    把这一行:

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

    CMakeLists.txt的第一行位于src目录之后

    这个CMakeLists.txt 文件不存在,所以我创建了它。这可能是第一个错误。此外,我的假设是我可以只输入g++ file.c,但也许我必须输入其他内容?

  • 我的主管告诉我,最有效的方法是使用我不熟悉的 shell 脚本。对这种方法有什么建议吗?

【问题讨论】:

  • 如果您没有 CMakeLists.txt 文件,那么您不太可能使用 CMake。那么,如果你根本不使用 CMake,为什么还要询问 CMake(并使用 cmake)标签?
  • gcc 6 将默认值更改为 gnu++14(即带有扩展的 c++14),因此切换到更高的 gcc 版本将允许您避免添加该标志,只要您也可以启用扩展(以及比您实际想要的更高的 C++ 版本)。
  • 最好的方法是使用 IDE。
  • @Tsyvarev 因为第一个解决方案提到了CMakeLists.txt,所以包含 CMake 标记对我来说很有意义。 @SanderDeDycker 谢谢,我会看看这个。 @MichaelChourdakis 对 Ubuntu 有什么好的建议吗?
  • 对于单一来源和小型项目,我同意你的主管。只需使用您常用的选项设置几个变量,例如cflags="-Wall -Wextra -pedantic -Wshadow" 然后std="-std=c++11" 然后提供您的文件名以作为参数进行编译并调用g++ $cflags $std -o "${1%.*}" "$1" 以使用与您的.cpp 文件命名相同的可执行文件进行编译——没有.cpp(您可以使用${@:2} 将任何其他参数添加到编译字符串的末尾)

标签: c++ shell c++11 ubuntu cmake


【解决方案1】:

CMakeLists.txt 是构建项目的规则文件,gcc 是一种编译器。

  1. 在您的目录中创建一个 CMakeLists.txt。
cmake_minimum_required(VERSION 3.0)
project(project_name)
# use c++ 11
set(CMAKE_CXX_STANDARD  11)
add_executable(func file.cpp)
  1. 创建名为buildcd build 的文件夹
  2. 构建它
cmake ..
make
  1. 最后,你会得到一个名为func的执行文件。

您应该了解 CMake 或 Make https://cmake.org/cmake-tutorial/

【讨论】:

    【解决方案2】:

    一个更简单的选择是将您的默认设置保留在Makefile

    CPPFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wshadow
    

    然后您只需调用make file,Make 就会为您将file.cpp 编译成可执行文件file

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2012-10-06
      相关资源
      最近更新 更多