【发布时间】: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 变量。