如何编辑默认生成文件
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?