【问题标题】:Add some flags by default to gcc (preferably using specs file)默认为 gcc 添加一些标志(最好使用 specs 文件)
【发布时间】:2012-04-18 00:39:07
【问题描述】:

我想让我的gcc 总是默认添加一些标志,有没有干净的方法来做到这一点?

基本上,我每次调用gcc 时都会传递一些标志,例如(但不限于)-g(以便它具有调试信息)。

有几种解决方法,但它们都很丑:

  1. alias g++=...,但我不喜欢这种做法;
  2. 写一个环绕g++的脚本,类似于1;
  3. ...

我宁愿只修改规范文件,以便一切顺利。

【问题讨论】:

标签: gcc g++


【解决方案1】:

运行strace gcc | grep specs 以查看它在哪里搜索规范文件,然后去那里运行gcc -dumpspecs > specs。您现在有一个可以编辑的规格文件。使用此参考:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html

【讨论】:

  • 您需要在 '|' 之前添加 2>&1,因为 strace 输出到 stderr。我在我的虚拟机上测试了这个想法,在 strace 输出建议的位置添加了一个修改过的规范文件,然后在一个虚拟 cpp 上运行 g++ -v,观察预期的选项。
  • 你能给我们举个例子吗?例如。如何添加默认链接器选项,一直存在?还是 C++ 编译器选项,还是 C 编译器选项?
  • 这个规范文件乍一看相当复杂。有很多 % 标记和 {},您能否向我们展示一个如何向链接器、C 编译器或 C++ 编译器添加默认选项的示例?
  • @Gravis GCC 读取规范文件(如果存在)并使用其中的值覆盖默认(内置)规范文件。通过转储整个默认规范文件并对其进行编辑,您可以有效地覆盖整个内置规范文件。
  • @baruch 你应该把它放在你的答案中并将链接更新为非特定版本。
【解决方案2】:

修改 specs 文件的麻烦在于你曾经改变了对某个选项的想法,你不能从命令行取消它;你必须去修改规范文件。您还必须记住在升级编译器时重新修改新的规范文件。

另外,您多久从命令行运行一次编译器?我知道我唯一一次直接这样做是当我需要临时修改命令行并且我懒得解决如何修复makefile中的编译器选项时,所以我从make 的输出,然后运行编译器。 alias 的一个问题是它不能在 makefile 中工作。所以,对我来说,问题将减少到确保在每个 makefile 中都使用编译器选项。

【讨论】:

  • 除了从命令行调用它之外,还有其他合法的用例。您可能想教 GCC 驱动程序在哪里可以找到替代 libc,例如 ... 或替代标头。或者添加“默认”标题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多