Ubuntu上安裝make命令並使用makefile文件簡化操作


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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM