2015-03-02 46 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