make命令作用:
對於一個包括幾百個源文件的應用程序,使用make和makefile工具就可以簡潔明快地理順各個源文件之間紛繁復雜的相互關系。而且如此多的源文件,如果每次都要鍵入gcc命令進行編譯的話,那對程序員來說簡直就是一場災難。而make工具則可自動完成編譯工作,並且可以只對程序員在上次編譯后修改過的部分進行編譯。因此,有效的利用make和makefile工具可以大大提高項目開發的效率。
make命令下載:
先更新找到ubuntu-make
sudo apt-get update sudo apt-get install ubuntu-make
再下載(我Ubuntu上直接有make命令,所以我沒使用上面那兩個命令,運行下面命令我的make命令更新到了最新版本)
sudo apt-get install make
gcc編譯過程:
對一個test.c文件進行編譯首先需要使用下面命令
gcc -c test.c
使源文件變成*.o文件
之后使用下面命令
gcc -o test.exe test.o
這條命令的作用就是指出test.exe可執行文件(因為Linux上可執行文件不需要exe結尾,所以你也可以換一個其他名字)的生成需要test.o文件(如果需要更多*.o文件在后面列出就可以)
make如何工作:
make在當前目錄下尋找“Makefile”或“makefile”文件
若找到,查找文件中的第一個目標文件.o
若目標文件不存在,根據依賴關系查找.s文件
若.s文件不存在,根據依賴關系查找.i文件
若.i文件不存在,根據依賴關系查找.c文件,此時.c文件一定存在,於是生成一個.o文件,再去執行
makefile文件格式:
<target>: <prerequisites> [Tab]<commands>
第一行冒號前為目標,冒號后為前置條件;第二行必須由一個Tab鍵起首,后接命令;目標是必須的,不可省略;前置條件和命令是可選的,但兩者必須至少存在一個。
示例:
test2.exe: test2.o gcc -o test2.exe test2.o test2.o: test2.c gcc -c test2.c
這意味着生成test.exe需要前置條件test2.o,生成test.o需要前置條件test2.c
1、test.c文件存在所以會執行下面的代碼 gcc -c test2.c
2、test.o文件存在所以會執行下面代碼 gcc -o test2.exe test2.o
這樣寫的限制:用一個Makefile同時編譯多個.c文件並生成可執行文件需要添加一個偽可執行文件。makefile 默認只生成第一個可執行文件,所以可以用偽可執行文件,make 過程中並不生成 這個偽可執行文件,在如下代碼中,all就是一個偽執行文件。
#makefile CC=gcc all:test1 test2 .PHONY:all test2 :test2.o $(CC) -o $@ $< test1 :test1.o $(CC) -o $@ $< test2.o:test2.c $(CC) -o $@ -c $< test1.o:test1.c $(CC) -o $@ -c $< clean: rm -rf test1 test2 test1.o test2.o .PHONY:all clean
make的一些選項:
1、-f
直接運行make命令會在當前文件夾下尋找makefile或者Makefile文件,你可以通過-f選項來改變這種默認特性
make -f my_makefile
make 命令會選擇掃描 my_makefile 來代替 Makefile。
2、-C
你可以為 make 命令提供不同的目錄路徑,在尋找 Makefile 之前會切換目錄的。這是一個目錄,假設你就在當前目錄下:
$ ls
file file2 frnd1.cpp
但是你想運行的 make 命令的 Makefile 文件保存在 ../make-dir/ 目錄下,你可以這樣做:
$ make -C ../make-dir/
make 命令首先切到特定的目錄下,在那執行,然后再切換回來。
3、-B
make -B 會強制編譯所有的目標文件以及最終的執行文件。
make的語法可以參看:https://blog.csdn.net/qq_35451572/article/details/81092902