亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

Linux 下 Make 命令實例詳解

添加時間:2017-1-12 20:49:06  添加: 思海網絡 
Linux 下 make 命令是系統管理員和程序員用的最頻繁的命令之一。管理員用它通過命令行來編譯和安裝很多開源的工具,程序員用它來管理他們大型復雜的項目編譯問題。本文我們將用一些實例來討論 make 命令背后的工作機制。 

Make 如何工作的 

對于不知道背后機理的人來說,make 命令像命令行參數一樣接收目標。這些目標通常存放在以 “Makefile” 來命名的特殊文件中,同時文件也包含與目標相對應的操作。更多信息,閱讀關于 Makefiles 如何工作的系列文章。 

當 make 命令第一次執行時,它掃描 Makefile 找到目標以及其依賴。如果這些依賴自身也是目標,繼續為這些依賴掃描 Makefile 建立其依賴關系,然后編譯它們。一旦主依賴編譯之后,然后就編譯主目標(這是通過 make 命令傳入的)。 

現在,假設你對某個源文件進行了修改,你再次執行 make 命令,它將只編譯與該源文件相關的目標文件,因此,編譯完最終的可執行文件節省了大量的時間。 

Make 命令實例 

下面是本文所使用的測試環境:


 OS —— Ubunut 13.04 
Shell —— Bash 4.2.45 
Application —— GNU Make 3.81 
下面是工程的內容: 

$ ls 
anotherTest.c Makefile test.c test.h 
下面是 Makefile 的內容:

all: test    
test: test.o anotherTest.o      
gcc -Wall test.o anotherTest.o -o test   
test.o: test.c      
gcc -c -Wall test.c    
anotherTest.o: anotherTest.c      
gcc -c -Wall anotherTest.c    
clean:      rm -rf *.o test 
現在我們來看 Linux 下一些 make 命令應用的實例: 

1. 一個簡單的例子 

為了編譯整個工程,你可以簡單的使用 make 或者在 make 命令后帶上目標 all。


$ make 
gcc -c -Wall test.c  
gcc -c -Wall anotherTest.c  
gcc -Wall test.o anotherTest.o -o test 
你能看到 make 命令第一次創建的依賴以及實際的目標。 

如果你再次查看目錄內容,里面多了一些 .o 文件和執行文件:


$ ls 
anotherTest.c anotherTest.o Makefile test test.c test.h test.o 
現在,假設你對 test.c 文件做了一些修改,重新使用 make 編譯工程:


 $ make 
gcc -c -Wall test.c  
gcc -Wall test.o anotherTest.o -o test 
你可以看到只有 test.o 重新編譯了,然而另一個 Test.o 沒有重新編譯。 

現在清理所有的目標文件和可執行文件 test,你可以使用目標 clean:

$ make clean 
rm -rf *.o test  
$ lsanotherTest.c Makefile test.c test.h 
你可以看到所有的 .o 文件和執行文件 test 都被刪除了。 

2. 通過 -B 選項讓所有目標總是重新建立 

到目前為止,你可能注意到 make 命令不會編譯那些自從上次編譯之后就沒有更改的文件,但是,如果你想覆蓋 make 這種默認的行為,你可以使用 -B 選項。 

下面是個例子:

 $ makemake: Nothing to be done for `all’.   
$ make -B gcc -c -Wall test.c gcc -c -Wall anotherTest.c gcc -Wall test.o anotherTest.o -o test 
你可以看到盡管 make 命令不會編譯任何文件,然而 make -B 會強制編譯所有的目標文件以及最終的執行文件。 

3. 使用 -d 選項打印調試信息 

如果你想知道 make 執行時實際做了什么,使用 -d 選項。 

這是一個例子:

 $ make -d | more
GNU Make 3.81
 Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   
This program built for x86_64-pc-linux-gnu Reading makefiles… 
Reading makefile `Makefile’… 
Updating makefiles…. 
Considering target file `Makefile’. 
Looking for an implicit rule for `Makefile’. 
Trying pattern rule with stem `Makefile’. 
Trying implicit prerequisite `Makefile.o’. 
Trying pattern rule with stem `Makefile’. 
Trying implicit prerequisite `Makefile.c’. 
Trying pattern rule with stem `Makefile’. 
Trying implicit prerequisite `Makefile.cc’. 
Trying pattern rule with stem `Makefile’. 
Trying implicit prerequisite `Makefile.C’. 
Trying pattern rule with stem `Makefile’. 
Trying implicit prerequisite `Makefile.cpp’. 
Trying pattern rule with stem `Makefile’. --More-- 
這是很長的輸出,你也看到我使用了 more 命令來一頁一頁顯示輸出。 

4. 使用 -C 選項改變目錄 

你可以為 make 命令提供不同的目錄路徑,在尋找 Makefile 之前會切換目錄的。 

這是一個目錄,假設你就在當前目錄下:

$ ls 
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt 
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt 
但是你想運行的 make 命令的 Makefile 文件保存在 ../make-dir/ 目錄下,你可以這樣做:

$ make -C ../make-dir/ 
make: Entering directory `/home/himanshu/practice/make-dir’  
make: Nothing to be done for `all’.  
make: Leaving directory `/home/himanshu/practice/make-dir 
你能看到 make 命令首先切到特定的目錄下,在那執行,然后再切換回來。 

5. 通過 -f 選項將其它文件看作 Makefile 

如果你想將重命名 Makefile 文件,比如取名為 my_makefile 或者其它的名字,我們想讓 make 將它也當成 Makefile,可以使用 -f 選項。

 make -f my_makefile 
通過這種方法,make 命令會選擇掃描 my_makefile 來代替 Makefile。


關鍵字:Linux 、Make、命令
分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站