2011-07-01 67 views
3

當使用一個autoconf/automake的構建系統,如果在一Makefile.am編譯器標記或其它變量(或類似configure.ac甚至更高的水平)的變化,與該生成文件相關聯的C++源文件將不會自動重建。這變得特別重要,因爲我們使用automake作爲只根據需要重新編譯的連續構建系統的一部分。Automake的重建的源文件生成文件是否改變

我的想法是,包括Makefile文件作爲其理論上解決上述問題的.o文件的依賴性。所以有幾個問題:

首先,是否可以添加這樣的規則?我寧願不必將該自定義規則添加到每個Makefile.am中,因此可以放置到頂級文件(如configure.ac)中的東西會很好。

其次,對這個缺點的方法是,在某些情況下,改變Makefile文件實際上並未影響編譯所以我會在最後的時候是不是真的需要它重建。我想我願意忍受這個(或者至少試試看看它有多痛苦),以更好地保證我的構建是正確的,但是有沒有更好的方法來解決這個問題?我相信clearmake通過保存實際編譯器命令(以及其他依賴項)來解決此問題,然後將當前命令與先前命令進行比較以確定是否需要重新生成文件。

+0

根據變化的Makefile變量重建的事情是錯誤的,因爲它打破了之類的東西'make install的前綴= /一些/其它/ prefix',這是必要的像GNU平放工具。 –

+0

@JackKelly我可以看到,一般來說,這將是一件壞事,但對於像AM_CPPFLAGS這樣的特定標誌改變它似乎需要重建。例如,如果我將'.../somelib-v2'改爲'.../somelib-v3',則代碼肯定需要重新編譯。我願意放棄命令行設置變量,如果我可以得到實際的Makefile *更改以強制重新編譯。 –

回答

2

如果您使用ccache(./configure CXX='ccache g++',或者只是將ccache的g ++添加到路徑中),虛假重建應該非常便宜並且仍然安全。另外請確保永遠不要使用AM_MAINTAINER_MODE autoconf宏,這使得依賴關係跟蹤成爲可選項(取決於--enable-maintainer-mode標誌)。

+0

感謝指針tobu。似乎只有當makefile規則會調用編譯器時纔會調用ccache?所以在我更改構建標誌並且automake沒有檢測到需要重建的情況下,ccache仍然有幫助嗎?對不起,如果我關於ccache如何適應雜草叢生。 –

+0

@Nathan是的,您仍然需要一些規則來使* .o依賴於Makefiles。 – Tobu

+0

感謝您的澄清。我將這個問題標記爲沒有答案,希望有人能夠爲我的問題的那部分提供答案。 –

相關問題