如何编辑默认生成文件

Posted

技术标签:

【中文标题】如何编辑默认生成文件【英文标题】:How to edit the default makefile 【发布时间】:2015-10-20 04:28:44 【问题描述】:

我可以编辑默认的 makefile 吗?我想将-std=c++11 标志添加到默认makefile 中,以便make 命令编译和构建C++11 程序。

例如,目前,当我尝试使用make 命令编译程序时,会出现以下错误:

g++ a.cpp -o a

a.cpp: In function ‘int main()’:

a.cpp:118:12: error: ISO C++ forbids declaration of ‘it’ with no type [-fpermissive]

  for(auto &it : v) cout << it << endl;
            ^

a.cpp:118:17: warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11
  for(auto &it : v) cout << it << endl;
                 ^

<builtin>: recipe for target 'a' failed

make: *** [a] Error 1

【问题讨论】:

打开Makefile 并将您的标志添加到CPPFLAGS 变量(如果存在)。但大多数 Makefile 都有这些变量 在哪里可以找到makefile?我不写任何makefile,我只是在终端中运行“make a”,其中a.cpp是文件名.. 那么Makefile应该在你调用make的同一个目录中。 其实我在问如何编辑默认makefile,可以使用“make -p -f /dev/null”查看 没有“默认生成文件”。内置规则称为内置规则,因为它们是内置的。如果你真的需要的话,你可以下载 gnu make 的源代码并修改它。否则,在您的源目录中创建一个makefile,然后将CPPFLAGS += -std=c++11 放入其中,内置规则将使用它。 【参考方案1】:

您可以将其他参数传递给make,这将覆盖默认值。

$ make [TARGET]... [VARIABLE=VALUE]...

在您的情况下,您希望将 -std=c++11 开关添加到 C++ 编译器。 C++ 编译器的标志存储在名为CXXFLAGS 的变量中。所以你可以试试这个。

$ make a CXXFLAGS='-std=c++11'

请注意,变量CPPFLAGS 确实持有 C++ 编译器的标志,而是 C(和 C++)预处理器的标志。因此,如果您将 -std=c++11 开关添加到它,如果 C 编译器被调用,您会感到非常惊讶。

实际上,由于-std 开关从根本上修改了编译器接受的语言,因此我更愿意将其视为编译器选择而不是编译器标志,因此我更喜欢覆盖包含名称的CXX 变量C++ 编译器。

$ make a CXX='g++ -std=c++11'

这还有一个好处是您可以保留任何其他编译器标志,例如 -Wall -O2 -g 或您拥有的。

【讨论】:

不要忘记您可以使用+= 添加到编译器标志。像这样:CXXFLAGS+='-std=c++11'【参考方案2】:

如果您尚未使用源代码在您的目录中创建一个makefile,则可以使用空文件来启动。

在你的makefile中,添加一行

CXXFLAGS='-std=c++11'

【讨论】:

以上是关于如何编辑默认生成文件的主要内容,如果未能解决你的问题,请参考以下文章

如何创建Hexo站点的Tags和Categories默认页面

如何查询和修改Linux操作系统生成core dump文件的默认路径?

如何使用 Inertia JS 在 Laravel 中默认编辑或删除身份验证的 URL?

MyEclipse自动生成注释,编辑默认注释模板

如何在 Matlab 中使用默认或动态生成的文件名进行保存? [复制]

如何编辑Microsoft Office Word 2003默认的Normal.dot模板文件