main.c為主體,input.c負責接收從鍵盤輸入的數值,calcu.h進行任意兩個數相加
這裡面當**特別多的時候
gcc main.c input.c calcu.c -o main
這行**就比較長
有一種辦法是分別把main,input, calcu編譯成點o檔案,然後再gcc連線
gcc -c main.c
gcc -c input.c
gcc -c calcu.c
gcc main.o input.o calcu.o - o main
這樣以後只要我修改了calcu.c, 只需要gcc -c calcu.c,然後再鏈結,節省了時間
但是這樣編譯的**量增大了,所以採用了makefile
基本語法目標:依賴集合
命令1命令2
(命令列表中每條命令必須以tab鍵開始, 不能用空格)
預設的第乙個目標就是終極目標
makefile變數的使用
# 變數使用
不加@就會把所執行的命令列印出來的
注意此時輸出的是shaozheming,=號的值取決於name的值,加上:=就不會這個問題
?=:如果前面賦值了就用前面的值, 沒有賦值就用?=後面的值
+=:類似字串拼接
makefile模式規則
類似萬用字元的規則
%.o : %.c
自動化變數
上面的萬用字元規則雖然大大減少了**量,但是在
gcc -c main.c 這裡面的main不能換成%
常用的幾種:
$@ : 規則中的目標集合,如果有多個目標,表示匹配模式中定義的目標集合
$< : 依賴檔案集合的第乙個檔案,如果依賴檔案是以%定義的,那麼這個就是符合模式的一系列檔案集合
$^ : 所有依賴檔案集合,使用空格分開。如果在依賴檔案中有多個重複檔案,他會去除重複檔案,只保留乙份
偽目標
偽目標是為了避免makefile中定義的只執行命令的目標和工作目錄下的市級檔案出現名字衝突,比如clean,這個就是只執行下面的命令而不是生成檔案,因此工作目錄下永遠不會存在檔案clean,所以屬於make clean,這個命令一定執行。但當我們手賤在工程目錄下建立乙個clean檔案,規則因為沒有依賴檔案,所以這個clean檔案是最新的,那後面的rm命令也不會執行。為避免這個問題,可以將clean宣告為偽目標。宣告方式為:
.phony : clean
Makefile 入門與基本語法
在我看來,學會寫簡單的makefile,閱讀較複雜的makefile,是每乙個linux程式設計師都必須擁有的基本素質。makefile可以自動識別哪些原始檔被更改過,需要重新編譯,那些不需要。從而節省大型工程重新編譯的時間。規則如下 如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。如...
makefile語法 Makefile的語法
假如乙個目標檔案所依賴的依賴檔案很多,我們豈不是要寫很多規則?這顯然不合乎常理。我們可以使用萬用字元解決這些問題。我們對上節程式進行修改 如下 test a.o b.o gcc o test o c gcc c o o 表示所用的.o檔案 c 表示所有的.c檔案 表示目標 表示所有依賴檔案 在該目錄...
makefile語法示例
edit main.o kbd.o cc o edit main.o kdb.o main.o main.c defs.h cc c main.c kbd.o kbd.c defs.h command.h cc c kbd.c clean rm o edit makefile中使用變數 object...