2015-03-02 53 views
2

我正在为大代码库设置autotools,该代码库曾经只是一个bash脚本编译,后来只是手工编写的Makefiles。使用autotools禁用特定文件的优化

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

什么是放弃任何现有的编译器优化和在编译器上为这些特定文件强制-O0标志的正确方法?

+1

“Makefile.in”中的'COMPILE'和'LTCOMPILE'变量似乎将'CFLAGS'列为最后一个变量,如下所述。也许'最干净'的方法是[subpackage](http://www.gnu.org/software/automake/manual/html_node/Subpackages.html),你可以在其中添加:'CFLAGS =“$ CFLAGS -O0”'in' configure.ac'。这看起来很笨拙。如果你找到更好的东西,请更新答案。 – 2015-03-05 08:23:21

回答

2

我和Brett Hale的评论一起使用subpackages。我是能够插入

: ${CFLAGS="-O0"} 

AC_PROG_CC,设定适当的优化了。其他解决方案不起作用,因为-g -O2最后被添加。之后你永远不会得到另一个-O变量。

-1

您不必删除现有的优化:编译器调用上的最后一个值-O将被使用,所以它最好在末尾添加-O0

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

否则,如果你知道你只会用GNU调用你的makefile,那么你可以使用GNU特有的其他技巧;您可能必须禁用有关非便携式内容的automake警告。

+0

我似乎只能让'-O0'出现在'-g -O2'之前。我应该在哪里添加“-O0”标志? – 2015-03-02 16:11:06

+0

您必须查看配方的定义方式。你需要弄清楚命令行中最后一个“标志”变量是什么,并将其添加到该变量中。不幸的是,最后一个是为用户保留的'CFLAGS'很有可能......那会很糟糕。你可能必须定义你自己的配方。我建议你在[email protected]邮件列表上询问这个问题。 – MadScientist 2015-03-02 17:00:22