makefile:makefile通過編譯和鏈接來運行程序;
陳浩老師有一篇博客在makefile原理這塊寫的很清楚:https://blog.csdn.net/haoel/article/details/2886
編譯:源文件編譯成中間代碼文件,在Window下就是.obj文件,Unix下是.o文件,即Object File
鏈接:把大量的Object File合成執行文件
我有一篇博客很詳細的寫了代碼的運行過程:https://blog.csdn.net/weixin_40740059/article/details/84075653
那麼makefile到底是如何使用的呢?
圖中是一個hello world代碼,可以用 gcc main.c -o main來進行運行,生成可執行文件之後,用./main執行即可!
如果用makefile來進行運行,首先了解makefile書寫的規則:
target: dependencies
command
//target:目標文件,在上圖中,也就是main
//!注意,冒號後要加空格
//dependencies:文件依賴,main的生成要依賴main.c
//command前面要加Tab鍵,不可以用空格!
//command:也就是我們用gcc編譯時的命令
// 即: gcc main.c -o main
首先創建一個makefile,然後來運行hello word 代碼:
main: main.c
gcc main.c -o main
輸出make後,會自動運行command命令,生成main的可執行文件
以上就是最基礎一個makefile了,那麼如果是一個大項目中包含.h,.c,.o要如何運行呢?
makefile:寫一個求最小值的代碼
創建find_min.h,find_min.c,main.c三個文件
依次分別爲find_min.h,find_min.c,main.c中的代碼;
用 gcc main.c find_min.c -o main運行後得到main可執行文件,./main執行
用makefile來運行:
main: main.c find_min.o
gcc main.c find_min.o -o main
//main的生成依賴main.c 和 find_min.o
//command中用main.c和find_min.o來生成main可執行文件
find_min.o: find_min.c
gcc -c find_min.c
//在一開始的main中存在依賴關係的是find_min.o
//那麼,如何生成find_min.o呢?command中用-c命令實現
運行make命令後,生成main的可執行文件,運行得出結果!
關於$(cc)和gcc區別:
在這個例子中我們用的是gcc編譯,如果要用g++編譯的時候,一句句對gcc進行更換十分麻煩,所以選擇用CC表示gcc
CC = gcc
$(CC)表示
同樣可以運行
關於make clean:
clean:
rm main
//同樣要用Tab鍵
完整運行後,輸出make clean命令就可以刪除main可執行文件