【问题标题】:Disable optimizations for a specific file with autotools使用自动工具禁用特定文件的优化
【发布时间】:2015-03-02 15:01:39
【问题描述】:

我正在为一个大型代码库设置自动工具,该代码库曾经只是一个 bash 脚本编译,后来只是手写的 Makefile。

我们有一组文件要求关闭编译器优化。这些文件已经在它们自己的子目录中,因此它们将拥有自己的 Makefile.am。

删除任何现有编译器优化并在这些特定文件的编译器上强制使用-O0 标志的正确方法是什么?

【问题讨论】:

  • COMPILELTCOMPILE 中的变量Makefile.in 似乎将CFLAGS 列为最后一个变量,如下所述。也许“最干净”的方法是subpackage,您可以在其中添加:CFLAGS="$CFLAGS -O0" in configure.ac。不过,这似乎是沉重的。如果您发现更好的答案,请更新答案。

标签: makefile autotools


【解决方案1】:

我同意 Brett Hale 的评论使用 subpackages。我能够插入

: ${CFLAGS="-O0"}

AC_PROG_CC 之前,它设置了适当的优化。其他解决方案不起作用,因为 -g -O2 是最后添加的。在它之后你永远无法获得另一个 -O 变量。

【讨论】:

    【解决方案2】:

    您不必删除现有的优化:将使用编译器调用时的最后一个 -O 值,因此只需在末尾添加 -O0 就足够了。

    automake 不直接支持这个,但是文档中定义了a trick you can use

    否则,如果你知道你只会用 GNU make 调用你的 makefile,你就可以玩 GNU make 特有的其他技巧;您可能必须禁用有关不可移植内容的自动生成警告。

    【讨论】:

    • 我似乎只能让-O0 出现在-g -O2 之前。我应该在哪里添加 -O0 标志?
    • 您必须查看配方的定义方式。您需要弄清楚命令行上最后一个“标志”变量是什么,并将其添加到该变量中。不幸的是,最后一个很可能是CFLAGS,它是为用户保留的……那太可惜了。您可能必须定义自己的食谱。我建议你在 automake@gnu.org 邮件列表中询问这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多