日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
“C語言”讀書札記之[Linux下C語言編程環(huán)境]

介紹

創(chuàng)新互聯從2013年開始,先為雁江等服務建站,雁江等地企業(yè),進行企業(yè)商務咨詢服務。為雁江企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

一般程序都是由多個源文件編譯鏈接而成的,這些源文件的處理步驟通常由Makefile文件管理。

用途

make工具用來進行協(xié)調的工具,可以根據程序模塊的修改情況重新編譯鏈接目標代碼,以保證目標代碼總是由它的最新模塊組成。

準備:

要使用make,準備Makefile的文件(也可以準備其他文件如GNUMakefile或makefile,推薦使用Makefile),它描述了軟件包中各個文件之間的關系,提供了更新每個文件的命令。

方便使用:

當一個適當的Makefile存在時,每次改變某些源文件,用簡單的shell命令(make),將足以完成所有必需的重新編譯。

原理:

make 程序利用Makefile的數據和每個文件最新一次更改的時間來確定哪些文件需要更新;對每個需要更新的文件,make程序使用Makefile中定義的命令來更新它。

格式:

 
 
 
 
  1. #用“井”號表明注釋。
  2. target(要生成的文件): dependencies(被依賴的文件)
  3.         #命令前面用的是“tab”而非空格。誤用空格是初學者容易犯的錯誤!
  4.         命令1
  5.         命令2
  6.         命令3
  7.           .
  8.           .
  9.           .
  10.         命令n
  11. #可以使用“\”表示續(xù)行。注意,“\”之后不能有空格!

target通常是我們要生成的文件的名字,擺放的順序不重要,但第一個target是默認的target。當make不帶參數時,自動執(zhí)行第一個target。target也可以是要求make完成的動作,執(zhí)行這種target后并不能得到和target同名的文件,因此,也稱為偽target(phony target)。

dependencies是生成target所需的文件名列表。依賴可以為空,常用的“clean”target就常常沒有依賴,只有命令。

命令可以是任何一個shell能運行的命令。

案例:

比如生成exe文件,它由2個目標代碼某塊組成,分別為module1.o和module2.o

module1.h文件

 
 
 
 
  1. int module1 = 1;

module1.c文件

 
 
 
 
  1. #include "module1.h"
  2. void print1(){
  3.     printf("var module1:%d\n", module1);
  4. }

module2.h文件

 
 
 
 
  1. int module2 = 2;

module2.c文件

 
 
 
 
  1. #include 
  2. #include "module2.h"
  3. void print2(){
  4.     printf("var module2:%d\n", module2);
  5. }
  6. int main(){
  7.     print1();
  8.     print2();
  9.     return 0;
  10. }

編譯

Makefile文件

 
 
 
 
  1. exe:module2.o module1.o
  2.     gcc -g module1.o module2.o  -o exe
  3. module2.o:module2.h module2.c
  4.     gcc -g -c module2.c
  5. module1.o:module1.h module1.c
  6.     gcc -g -c module1.c
  7. clean:
  8.     rm -f exe *.o

#p#

規(guī)則

在編寫完源程序文件后,從中生成需要的Makefile規(guī)則。

最基本的編寫規(guī)則的方法是從最終的源程序文件開始一個一個的查看源碼文件,把它們要生成的目標文件做為目標,而C語言源碼文件和源碼文件包含的頭文件作為依賴文件生成規(guī)則。

目標和條件之間的關系是:欲更新目標,必須首先更新它的所有條件;所有條件中只要有一個條件被更新了,目標也必須隨之被更新。所謂“更新”就是執(zhí)行一遍規(guī)則中的命令列表,命令列表中的每條命令必須以一個Tab開頭,注意不能是空格,Makefile的格式不像C語言的縮進那么隨意,對于Makefile中的每個以Tab開頭的命令,make會創(chuàng)建一個Shell進程去執(zhí)行它。

Makefile中的變量

Makefile中變量就像一個環(huán)境變量。事實上環(huán)境變量在make中也被解釋成make的變量。

作用:

保存文件名列表?!梢苑奖愕丶尤胄碌哪繕宋募也灰壮鲥e。

保存編譯器參數?!诤芏嘣创a編譯時,gcc需要很長的參數選項,在很多情況下,所有的編譯命令使用一組相同的選項,如果把這組選項使用一個變量表示,那么可以把這個變量放在所有引用編譯器的地方。(當要改變選項的時候,只需改變一次這個變量內容即可)

語法:

變量:“變量”指的是用一個字符串代替另一個字符串的功能。在makefile中可以使用“=”號來定義變量,使用“$(變量名)”來使用變量;還可以用“:=”追加變量的內容。習慣上,變量名使用大寫。

定義:

變量名=字符串

使用:

$(變量名)

追加:

變量名:=字符串

案例:進化上面的Makefile

 
 
 
 
  1. OBJS=module1.o module2.o
  2. C=-c
  3. CC=gcc
  4. exe:$(OBJS)
  5.     $(CC) -g $(OBJS)  -o exe
  6. module2.o:module2.h module2.c
  7.     $(CC) -g $(C) module2.c
  8. module1.o:module1.h module1.c
  9.     $(CC) -g $(C) module1.c
  10. clean:
  11.     rm -f exe *.o

偽目標

首先要明確,并不是所有的目標文件都對應于磁盤文件,有的目標文件的存在只是為了形成一條規(guī)則,從而使make完成特定的工作,并不生成新的目標文件,這樣的目標稱為偽目標?!缟厦鍹akefile中的clean。常用的還有all。

放例子:

 
 
 
 
  1. all:exe1 exe2 
  2. exe1:exe1.c exe1.h
  3.     gcc exe1.c -o exe1
  4. exe2:exe2.c exe2.h
  5.     gcc exe2.c -o exe2
  6. clean:
  7.     rm -f exe*

其中的all和clean都為偽目標。偽目標文件是不存在的。注意上面例子中第一條規(guī)則下的命令行為空,make不會執(zhí)行任何動作,只是檢查依賴文件的更新情況, 掃描剩下的幾條規(guī)則并執(zhí)行相應的編譯命令生成可執(zhí)行文件。

條件語句

條件語句可以將一個變量與其他變量的值進行比較,或將一個變量與一個字符串常量相比較。——這樣就可以根據變量的值執(zhí)行或忽略Makefile文件中的一部分腳本。

注意:條件語句用于控制make時間看見的Makefile文件部分,而不能用于執(zhí)行時控制shell命令。

條件語句3條指令:ifeq, else 和endif

放樣例:

 
 
 
 
  1. ifeq($(VAR), 1)
  2.     gcc -o exe1 module
  3. else
  4.     gcc -o exe2 module
  5. endif

調試make

我們在很多語言中都要用到調試,那么我們自然對make也要想到調試了。

make的調試很簡單,只需通過-d選項可是make在執(zhí)行命令時打印調試信息。

這些信息包括:

1、make重新編譯時需要檢查的文件

2、哪些文件被比較以及比較的結果

3、需要重新生成的文件

4、make將要使用的隱含規(guī)則

5、make實際執(zhí)行的隱含規(guī)則和命令

放截圖樣例(一部分)

參考文獻

make - 維基百科,自由的百科全書

第 22 章 Makefile基礎

總結

想要熟練地掌握make工具,必需通過不斷的練習并參考其他Makefile的例子。

我會在后期的開發(fā)學習中不斷完善這篇博文。


標題名稱:“C語言”讀書札記之[Linux下C語言編程環(huán)境]
瀏覽路徑:http://www.dlmjj.cn/article/dheiied.html