2012-01-01 99 views
0

我想知道編譯使用多個文件的程序的好方法,並且我想避免重新編譯未修改的文件。編譯腳本

它適用於Linux,我正在尋找與Makefile不同的東西。

Makefile存在一些問題:
寫了很長時間,只要我創建新文件,它就變得很冗長; C/C++使用頭文件。
如果包含包含另一個已修改的.h文件的.h文件,Makefile不會重新編譯.c文件。它需要複雜的語法。
Makefile使用製表符,它不好,因爲我使用Tab鍵縮進(它插入4個空格字符代替)。

舉個例子,我原來的編譯腳本是:

gcc file1.c -c -flags1 
gcc file2.c -c -flags2 
gcc file3.c file4.c -c -flags3 
gcc file1.o file2.o file3.o file4.o -o a.out 

我想避免重新編譯究竟是不是需要用簡單的方法。

+0

人們不得不想知道每個.c文件的不同標記是怎樣處理的。 – 2012-01-01 05:01:32

+0

請注意,您的四位空間問題在您的編輯器(或編輯器設置)中是不足的,而不是使用'make'本身。任何不允許插入任意字符的編輯器都會死機。 – paxdiablo 2012-01-01 05:13:11

+0

關於makefile中的選項卡,如果你想要別的東西,就有'.RECIPEPREFIX'。 – 2012-01-01 05:15:58

回答

1

一些項目(Doom3,MongoDB和其他)使用SCons

它是用Python編寫的,有許多功能(如並行編譯)。

3

UPDATE:本文中提到的Make教程不再存在,這是一個非常糟糕的恥辱,因爲它是一個非常好的介紹。

Makefiles可以是無縫的,你可以讓它自動編譯你的項目,完全基於項目目錄中的文件。請參閱Make Tutorial。在該教程之後,您將學會創建動態Makefile腳本,該腳本僅編譯已修改的腳本,並遵循依賴關係樹。

但是,如果你想看到一些進一步的巫術,看看在DevKitPro的makefile,他們去儘量搞清楚頭依賴也使用的是什麼,我只能推測是使用grep的。隨意修改它爲您自己的項目。

2

您也可以使用其他一些構建器,例如, omake build systemP.Millier's cook system等我認爲omake是非常強大的。使用其他構建器的缺點是每個Linux系統通常都有make,但不是omake(或cmakecook)的情況。

不要忘記,make依賴關係可以通過gcc幾個preprocessor options-M等產生。在實踐中,你可以使用GNU讓詭計,以避免編寫複雜Makefile -s。

好的編輯器,例如, emacs爲您提供了特定模式以幫助編輯(&突出顯示)Makefile-s。

你可以使用(甚至內部Makefile -s或omake或其他製造商)的ccache編譯器緩存(它可以通過符號鏈接它作爲gcc「透明」使用)。

您可以將編輯分發到本地網絡上的其他機器,例如, distccicecream。當然,許多編譯器允許並行編譯(例如make -j)。

存在着幾個Makefile發電機,特別是GNU autotools套件和cmake

不要忘了使用版本控制系統(如GIT)爲您的源代碼。

+0

+1:我用過OMake,使用起來非常簡單,同樣具有表現力。 – 2013-05-28 00:42:44

0

我發現了一個更簡單的方法來使用makefile,它的工作原理。沒有製表。使用touch,我可以強制依賴頭文件編譯。

myexe.out: file1.o file2.o;\ 
g++ file1.o file2.o -o myexe.out 

file1.o: file1.cpp;\ 
g++ -c file1.cpp -flags1 

file2.o: file2.cpp header1.hpp;\ 
g++ -c file2.cpp -flags2 

header1.hpp: header2.hpp;\ 
touch header1.hpp 

我會嘗試SCons。
感謝大家。

+0

你也應該看看'omake'! – 2012-01-07 07:44:22