【问题标题】:Where are the GCC flags for MAKE being passed from?MAKE 的 GCC 标志从哪里传递?
【发布时间】:2014-05-07 07:47:57
【问题描述】:

我正在本地处理一个现有项目。我是该项目的新手,所以我按原样使用提供的make 文件。我修改了一些代码,运行make,构建通过了。

当我将更改推送到 github 时,自动 Travis CI 构建检测到编译错误。

在 StackOverflow 上搜索错误显示,这是 C++11 之前的错误,但不是 C++11 及更高版本的错误。

这意味着我的本地 make 必须在打开 C++11 标志的情况下进行编译,而服务器上的 Travis CI 构建在不带标志的情况下进行编译。

理想情况下,我希望我的本地构建条件与服务器构建条件相匹配,以便在推送之前检测到任何错误。

我在哪里可以看到为我的本地 make 操作传递给 GCC 的标志,或者是否有其他方法可以显式禁用 C++11 编译标志?

【问题讨论】:

  • 检查您是否在任何地方设置了CXXFLAGS
  • @juanchopanza 我在本地寻找标志,但没有看到它在任何地方使用。它是否有可能被隐式传递?..
  • 尝试make VERBOSE=1 通常会有所帮助(如果您的构建脚本支持)
  • makefile 是如何创建的?他们在哪里手工编码?由例如CMake 或类似工具?你没看到make(以及标志)发出的实际命令吗?
  • 您应该能够看到用于编译每个文件的命令行。因此,在构建项目时查看输出并检查使用了哪些标志(例如,是否存在 -std=c++0x 或类似的),以便验证它确实是导致问题的 C++11 模式. CXXFLAGS 也可能取自您的 shell 环境变量,因此请检查一下。否则,您需要阅读并了解您的 Makefile 如何编译源代码以及它使用哪些标志和变量来编译,作者可以免费使用任何东西,它不必是 CXXFLAGS 变量。

标签: c++ gcc makefile


【解决方案1】:

假设您有一些all 目标,用于构建主要内容:

all: (some dependencies)
    (some commands)

为了确保在构建时使用了哪些标志,您可以添加一些虚拟依赖项:

all: (some dependencies) showflags
    (some commands)

showflags:
    @echo "CXXFLAGS=$(CXXFLAGS)"
    @echo "CPPFLAGS=$(CPPFLAGS)"

至少您将能够看到使用了哪些选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多