假設現在有main.c
、haha.c
、sin_value.c
、cos_value.c
這4個檔案。若是想要編譯出乙個可執行檔案,則要經歷如下步驟
gcc -c main.c
gcc - haha.c
gcc -c sin value.c
gcc -c cos value.c
gcc -o main main.o haha.o sin value.o cos value.o -lm -l/usr/lib -l/lib
可以看出編譯的過程十分的繁瑣,而且如果要重新編譯,則上面的步驟都得重新來一次。
那麼使用make
工具就能完美解決這個問題。那麼要使用make
就得先配置makefile
。
以上面的例子為例:
main: main.o haha.o sin value.o cos value.o
gcc -o main main.o haha.o sin value.o cos value.o -lm
編寫makefile
檔案之後,只需要在makefile
目錄下執行make
命令即可。
make的優點:
makefile檔案的基本規則如下:
target: targetfile1 targetfile2
gcc -o excutablefile targetfile2 targetfile2
那個target
就是我們想要建立的資訊,而目標檔案(targetfile)就是具有相關性的object file。命令列必須要以tab
按鍵作為開頭才行。
還可以在makefile檔案中新增clean操作。
main: main.o haha.o sin value.o cos value.o
gcc -o main main.o haha.o sin value.o cos value.o -lm
clean: rm -f main main.o haha.o cos value.o sin value.o
只需要執行make clean
就可以直接清除掉編譯產生的所有目標檔案和可執行檔案。 在Linux下用make指令編譯進度條程式。
首先建立乙個新的檔案,touch progress bar.c 執行該vim progress bar.c命令,寫進度條的程式。寫進乙個進度條程式 include include include void progress printf n int main 如圖 該 中需要注意的小細節 1.con...
Makefile中用巨集定義進行條件編譯
在源 裡面如果這樣是定義的 ifdef macroname 可選 endif 那在makefile裡面 gcc d macroname macrodef 或者 gcc d macroname 這樣就定義了預處理巨集,編譯的時候可選 就會被編譯進去了。對於gcc編譯器,有如下選項 d macro st...
用do while進行複雜的巨集定義
在很多比較複雜的巨集定義中,經常可以看到整個介面被一層do while 0 給包了起來 define foo x dowhile 0 這樣定義的是乙個非復合語句,可以確保在類似下面這種情況 if foo x else 可以順利展開,展開後的結果被do while包了起來 if do while 0 ...