鑑於我有一個簡單的Makefile中像這樣一個項目:如何分離不同配置的Makefile構建輸出?
all: foobar
foobar: foo.o bar.o
,我可以建立針對不同的架構:
$ CC=clang make # or
$ CC=x86_64-w64-mingw32-gcc make # or
$ CC=arm-linux-gnueabihf-gcc make
這工作,但我希望能夠保持多路輸出同時配置,例如在構建服務器上。
什麼是一個很好的,乾淨的方式去做這件事?我已經考慮了以下幾點:
- 使用自動工具或其他構建工具,但我想看看有什麼可以不
- 創建建立與生成文件目錄,在他們VPATH設置,包括根Makefile文件
- 寫在構建每個體系結構後移動輸出的腳本
- 修改Makefile以構建多個配置。我不喜歡這個解決方案,因爲你最終會遇到一種複雜的元文件,它與你的特定的編譯環境緊密耦合。
- 向Makefile添加一個變量來設置輸出目錄。這可以工作,但這意味着我不能使用隱式的Makefile規則。模式的規則將變得混亂太
,你的意思是對象,或者只是最終的可執行文件?通常的做法是將$(OBJDIR)設置爲對象的輸出目錄,並且可以根據構建配置有條件地設置它。隱式規則很容易重寫,儘管你必須首先創建一個規則來創建$(OBJDIR)。 – blackghost
我認爲你應該對每個架構使用不同的目標(包含目錄)。說'arm/foo','x86_64/foo'和'main/foo'。我建議儘可能簡單:) – uzsolt
我認爲我會使用@John提到的'$(OBJDIR)'解決方案。我真的希望能做到像'make -f ../Makefile VPATH = ...'這樣的東西,但我想它不是。 @uzsoft我不認爲Makefile應該具備這些不同環境的知識,而應該是適應性的。因此我的'meta-Makefile'的評論。 –