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

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

Linux操作系統下makefile和make規則

添加時間:2010-12-8  添加: admin 
  首先介紹make實用程序的語法和常用選項,然后細剖makefile文件的組成。

  make命令

  make [選項] [目標] [宏定義]

  通過命令行參數中的target,可指定make要編譯的目標,并且允許同時定義編譯多個目標,操作時按照從左向右的順序依次編譯target選項中指定的目標文件。如果命令行中沒有指定目標,則系統默認target指向描述文件中第一個目標文件。

  -d 顯示調試信息

  -n 不運行任何makefile文件,只打印需要執行的命令

  -p 輸出所有宏定義和目標文件描述

  -s 靜止狀態下運行,不顯示任何命令行信息

  -f file 通知make程序從file中讀取內部依賴說明,缺省情況下會讀取makefile或者Makefile文件處理,文件名-表示讀取標準輸入,在Linux中,GNU make工具在當前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索makefile文件

  注意:在源文件沒有被修改的情況下,運行make命令會生成一條消息,說源文件的可執行文件是最新的,不需要用make命令重新編譯和鏈接。要強制再創建可執行代碼,需要改變源文件的上次更新時間,可以使用touch命令,然后再次運行make命令。

  touch [選項] 文件或目錄

  -r 文件或目錄 把指定文件或目錄的日期時間,設成和參考文件或目錄的日期時間相同

  -d 日期時間 使用指定的日期時間,而非現在的時間

  makefile規則

  make程序基于文件之間的依賴性,需要建立的目標文件,以及建立目標文件時要執行的命令,以上所有被稱為規則,存放在文件makefile中。定制規則的語法如下:

  目標列表 : 關聯性列表

  命令列表

  注意:

  1.可以在關聯性列表和命令列表中使用shell文件名模式匹配字符,例如?、*、[]等等。

  2.如果目標的命令列表中某個命令前面帶有@,那么當make程序執行時,該命令是不會有反應的,在程序運行完畢之后,所有前面帶@的命令按照反序執行。可以通過執行make -n命令顯示這些命令以供查看。

  3.如果目標的命令列表中某個命令前面帶有-,說明如果該命令執行有誤,會跳過該命令并繼續執行。

  make程序使用makefile中的規則決定程序中需要重新編譯的文件,并再次鏈接生成可執行代碼。如果源文件上修改的時間戳比目標文件上的時間戳更新,那么make重新編譯build中包含的源文件。例如,如果修改了一個.h頭文件,make程序就會重新編譯所有包含該頭文件的源文件,前提是頭文件在這些源文件的目標文件的關聯性列表中;再如某.c源文件被修改,那么該源文件被重新編譯,生成對應的新的目標文件。

  myprog : foo.o bar.o

  gcc –o myprog foo.o bar.o

  foo.o : foo.c foo.h bar.h

  gcc –o foo.o –c foo.c

  bar.o : bar.c bar.h

  gcc –o bar.o –c bar.c

  上述規則中,只要目標文件比冒號后面的文件任何一個舊,將會執行下一行的命令;但是在檢查foo.o和bar.o的時間之前,會往下查找那些把foo.o和bar.o作為目標文件的規則;以此類推,并最終回到myprog規則。

  如何得到每個C文件的輸出規則呢?可使用-M和-MM編譯選項。注意:使用-M和-MM編譯選項時,僅在shell中輸出規則信息,不能用于產生可執行文件,即不能寫成gcc -o hello -M hello.c這樣的形式。

  gcc –M hello.c //輸出hello.c和該文件中所有<>和””包含的頭文件

  gcc –MM hello.c //僅輸出hello.c和該文件中所有””包含的頭文件

  后綴(隱含)規則

  make -p命令顯示了所有后綴規則列表。為了建立一個目標,make使用程序會遍歷一連串的依賴關系,從而決定從何處開始建立。如果沒有找到目標文件,make程序按照優先順序查找源文件,首先查找.c、.f或.s后綴的文件,然后再查找SCCS(帶.c~后綴)文件,如果沒有找到任何一個源文件,make程序就會報告一個異常。

  make程序知道調用gcc -c xxx.c -o xxx.o的預定義命令,而且還知道目標文件通常和源文件是相同的,這種功能稱作標準依賴性,所以foo.o : foo.c foo.h bar.h這樣的語句可以簡寫成foo.o : foo.h bar.h。同時,如果把生成foo.o和bar.o的命令從規則中刪除,make將自動查找它的隱含規則(gcc -M/MM輸出的代碼),然后找到一個適當的命令,命令中會使用一些變量,并且按照一定步驟設定。

  因此,上述makefile的內容可以根據后綴規則簡寫成:

  myprog : foo.o bar.o

  gcc –o myprog foo.o bar.o

  foo.o : foo.h bar.h

  bar.o : bar.h

  宏定義(變量)

  makefile中的變量定義可以存儲文件名列表、可執行文件名以及編譯器標識等,主要是使用如下方法:

  VAR=name 變量

分享到:

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