本周主要學(xué)習(xí)在Linux系統(tǒng)下使用Makefile對(duì)多個(gè)C語(yǔ)言源程序進(jìn)行編譯。
對(duì)于多個(gè)C語(yǔ)言源程序編譯的時(shí)候蜈敢,可以進(jìn)行合并編譯撕氧,例如下:
$ gcc main.c stack.c maze.c -o main
但是這種辦法并不是很好腐宋,由于一般大型軟件大多由上千個(gè)源程序組成无蜂,所以當(dāng)其中的一個(gè)出錯(cuò)伺糠,還需把所有源文件重新編譯一遍,而全部編譯一遍需要幾個(gè)小時(shí)斥季,所以這種方法并不是首選训桶,除非源程序數(shù)量極少。
還有一種方法如下:
$ gcc -c main.c
$ gcc -c stack.c
$ gcc -c maze.c
$ gcc main.o stack.o maze.o -o main
如果編譯之后又對(duì)maze.c做了修改酣倾,要重新編譯只需要做兩步:
$ gcc -c maze.c
$ gcc main.o stack.o maze.o -o main
然而這樣也與上一種方法有著類似的弊端舵揭,比如說尋找錯(cuò)誤困難,重新編譯耗時(shí)長(zhǎng)躁锡。
所以使用Makefile對(duì)C語(yǔ)言進(jìn)行編譯不失為一種首選方法午绳。
make 程序利用Makefile的數(shù)據(jù)和每個(gè)文件最新一次更改的時(shí)間來確定哪些文件需要更新;對(duì)每個(gè)需要更新的文件,make程序使用Makefile中定義的命令來更新它映之。
Makefile一般格式:
target(要生成的文件): dependencies(被依賴的文件)
#命令前面用的是“tab”而非空格拦焚。誤用空格是初學(xué)者容易犯的錯(cuò)誤!
命令1
命令2
命令3
.
.
.
命令n
目標(biāo)和條件之間的關(guān)系是:欲更新目標(biāo)杠输,必須首先更新它的所有條件赎败;所有條件中只要有一個(gè)條件被更新了,目標(biāo)也必須隨之被更新抬伺。所謂“更新”就是執(zhí)行一遍規(guī)則中的命令列表螟够,命令列表中的每條命令必須以一個(gè)Tab開頭,注意不能是空格峡钓,Makefile的格式不像C語(yǔ)言的縮進(jìn)那么隨意妓笙,對(duì)于Makefile中的每個(gè)以Tab開頭的命令,make會(huì)創(chuàng)建一個(gè)Shell進(jìn)程去執(zhí)行它能岩。
所以將源程序和頭文件放在同一目錄下寞宫,在該目錄下運(yùn)行make命令即可進(jìn)行編譯。