亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? make.html

?? 此源碼是清華大學對于Linux作的系列講座之一;其中主要講解了如何正確的使用Linux操作系統。
?? HTML
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
    <TITLE>GNU make 和 makefile</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
    <META NAME="GENERATOR" CONTENT="StarOffice/5.1 (Linux)">
    <META NAME="AUTHOR" CONTENT="Yongming Wei">
    <META NAME="CREATED" CONTENT="20000329;17342600">
    <META >
    <STYLE>
    <!--
        H1 { color: #ffff00 }
        H2 { color: #ffff00 }
        H3 { color: #ff00ff }
        H4 { color: #ffff00 }
        TD P { color: #b880b8 }
        LI { color: #ffffff }
        P { color: #00ffff }
        A:link { color: #00b8ff }
        A:visited { color: #ff3366 }
    -->
    </STYLE>
</HEAD>
<BODY TEXT="#ffff00" LINK="#00b8ff" VLINK="#ff3366" BACKGROUND="../images/velvet.jpg">

<A HREF="compiler.html"><IMG SRC="prev.gif" ALT="Previous"></A>
<A HREF="utilities.html"><IMG SRC="next.gif" ALT="Next"></A>
<A HREF="index.html"><IMG SRC="toc.gif" ALT="Contents"></A>

<H1 ALIGN=CENTER>1.9&nbsp;&nbsp;GNU make 和 makefile<BR><BR>
</H1>

<UL>
    <LI><P>GNU make</LI>
    <LI><P>makefile 基本結構</LI>
    <LI><P>makefile 變量</LI>
    <LI><P>GNU make 的主要預定義變量</LI>
    <LI><P>隱含規則</LI>
    <LI><P>makefile 范例</LI>
    <LI><P>運行 make</LI>
</UL>

<H3>1.9.1&nbsp;&nbsp;GNU make</H3>
<PRE>
在大型的開發項目中,通常有幾十到上百個的源文件,如果每次均手工鍵入 gcc 命令進行編譯的話,則會
非常不方便。因此,人們通常利用 make 工具來自動完成編譯工作。這些工作包括:如果僅修改了某幾個
源文件,則只重新編譯這幾個源文件;如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件。
利用這種自動編譯可大大簡化開發工作,避免不必要的重新編譯。
實際上,make 工具通過一個稱為 makefile 的文件來完成并自動維護編譯工作。makefile 需要按照某種
語法進行編寫,其中說明了如何編譯各個源文件并連接生成可執行文件,并定義了源文件之間的依賴關系。
當修改了其中某個源文件時,如果其他源文件依賴于該文件,則也要重新編譯所有依賴該文件的源文件。
makefile 文件是許多編譯器,包括 Windows NT 下的編譯器維護編譯信息的常用方法,只是在集成開發環
境中,用戶通過友好的界面修改 makefile 文件而已。
默認情況下,GNU make 工具在當前工作目錄中按如下順序搜索 makefile:
* GNUmakefile
* makefile
* Makefile
在 UNIX 系統中,習慣使用 Makefile 作為 makfile 文件。如果要使用其他文件作為 makefile,則可利用類
似下面的 make 命令選項指定 makefile 文件:
$ make -f Makefile.debug
</PRE>

<H3>1.9.2&nbsp;&nbsp;makefile 基本結構</H3>
<PRE>
makefile 中一般包含如下內容:
* 需要由 make 工具創建的項目,通常是目標文件和可執行文件。通常使用“目標(target)”一詞來表示
要創建的項目。
* 要創建的項目依賴于哪些文件。
* 創建每個項目時需要運行的命令。
例如,假設你現在有一個 C++ 源文件 test.C,該源文件包含有自定義的頭文件 test.h,則目標文件 test.o
 明確依賴于兩個源文件:test.C 和 test.h。另外,你可能只希望利用 g++ 命令來生成 test.o 目標文件。
這時,就可以利用如下的 makefile 來定義 test.o 的創建規則:

# This makefile just is a example.
# The following lines indicate how test.o depends
# test.C and test.h, and how to create test.o

test.o: test.C test.h
    g++ -c -g test.C

從上面的例子注意到,第一個字符為 # 的行為注釋行。第一個非注釋行指定 test.o 為目標,并且依賴于 
test.C 和 test.h 文件。隨后的行指定了如何從目標所依賴的文件建立目標。
當 test.C 或 test.h 文件在編譯之后又被修改,則 make 工具可自動重新編譯 test.o,如果在前后兩次
編譯之間,test.C 和 test.h 均沒有被修改,而且 test.o 還存在的話,就沒有必要重新編譯。這種依賴
關系在多源文件的程序編譯中尤其重要。通過這種依賴關系的定義,make 工具可避免許多不必要的編譯工
作。當然,利用 Shell 腳本也可以達到自動編譯的效果,但是,Shell 腳本將全部編譯任何源文件,包括
哪些不必要重新編譯的源文件,而 make 工具則可根據目標上一次編譯的時間和目標所依賴的源文件的更新
時間而自動判斷應當編譯哪個源文件。
一個 makefile 文件中可定義多個目標,利用 make target 命令可指定要編譯的目標,如果不指定目標,
則使用第一個目標。通常,makefile 中定義有 clean 目標,可用來清除編譯過程中的中間文件,例如:
clean:
    rm -f *.o
運行 make clean 時,將執行 rm -f *.o 命令,最終刪除所有編譯過程中產生的所有中間文件。
</PRE>

<H3>1.9.3&nbsp;&nbsp;makefile 變量</H3>
<PRE>
GNU 的 make 工具除提供有建立目標的基本功能之外,還有許多便于表達依賴性關系以及建立目標的命令的特
色。其中之一就是變量或宏的定義能力。如果你要以相同的編譯選項同時編譯十幾個 C 源文件,而為每個目
標的編譯指定冗長的編譯選項的話,將是非常乏味的。但利用簡單的變量定義,可避免這種乏味的工作:

# Define macros for name of compiler
CC = gcc

# Define a macr o for the CC flags
CFLAGS = -D_DEBUG -g -m486

# A rule for building a object file
test.o: test.c test.h
    $(CC) -c $(CFLAGS) test.c

在上面的例子中,CC 和 CFLAGS 就是 make 的變量。GNU make 通常稱之為變量,而其他 UNIX 的 make 
工具稱之為宏,實際是同一個東西。在 makefile 中引用變量的值時,只需變量名之前添加 $ 符號,如
上面的 $(CC) 和 $(CFLAGS)。
</PRE>

<H3>1.9.4&nbsp;&nbsp;GNU make 的主要預定義變量</H3>
<PRE>
GNU make 有許多預定義的變量,這些變量具有特殊的含義,可在規則中使用。表 1-5 給出了一些主要的
預定義變量,除這些變量外,GNU make 還將所有的環境變量作為自己的預定義變量。

                        表 1-5  GNU make 的主要預定義變量
預定義變量                      含義
$*              不包含擴展名的目標文件名稱。
$+              所有的依賴文件,以空格分開,并以出現的先后為序,可能包含重復的依賴文件。
$<              第一個依賴文件的名稱。
$?              所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標的創建日期晚。
$@              目標的完整名稱。
$^              所有的依賴文件,以空格分開,不包含重復的依賴文件。
$%              如果目標是歸檔成員,則該變量表示目標的歸檔成員名稱。例如,如果目標名稱
                為 mytarget.so(image.o),則 $@ 為 mytarget.so,而 $% 為 image.o。
AR              歸檔維護程序的名稱,默認值為 ar。
ARFLAGS         歸檔維護程序的選項。
AS              匯編程序的名稱,默認值為 as。
ASFLAGS         匯編程序的選項。
CC              C 編譯器的名稱,默認值為 cc。
CCFLAGS         C 編譯器的選項。
CPP             C 預編譯器的名稱,默認值為 $(CC) -E。
CPPFLAGS        C 預編譯的選項。
CXX             C++ 編譯器的名稱,默認值為 g++。
CXXFLAGS        C++ 編譯器的選項。
FC              FORTRAN 編譯器的名稱,默認值為 f77。
FFLAGS          FORTRAN 編譯器的選項。
</PRE>

<H3>1.9.5&nbsp;&nbsp;隱含規則</H3>
<PRE>
GNU make 包含有一些內置的或隱含的規則,這些規則定義了如何從不同的依賴文件建立特定類型的目標。
GNU make 支持兩種類型的隱含規則:
* 后綴規則(Suffix Rule)。后綴規則是定義隱含規則的老風格方法。后綴規則定義了將一個具有某個
后綴的文件(例如,.c 文件)轉換為具有另外一種后綴的文件(例如,.o 文件)的方法。每個后綴規
則以兩個成對出現的后綴名定義,例如,將 .c 文件轉換為 .o 文件的后綴規則可定義為:

.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

* 模式規則(pattern rules)。這種規則更加通用,因為可以利用模式規則定義更加復雜的依賴性規則。
模式規則看起來非常類似于正則規則,但在目標名稱的前面多了一個 % 號,同時可用來定義目標和依賴
文件之間的關系,例如下面的模式規則定義了如何將任意一個 X.c 文件轉換為 X.o 文件:

%.c:%.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

</PRE>

<H3>1.9.6&nbsp;&nbsp;makefile 范例</H3><P#SAMPLE#>
<p></P>

<H3>1.9.7&nbsp;&nbsp;運行 make</H3>
<PRE>
我們知道,直接在 make 命令的后面鍵入目標名可建立指定的目標,如果直接運行 make,則建立第一個
目標。我們還知道可以用 make -f mymakefile 這樣的命令指定 make 使用特定的 makefile,而不是
默認的 GNUmakefile、makefile 或 Makefile。但 GNU make 命令還有一些其他選項,表 1-6 給出了
這些選項。

                        表 1-6  GNU make 命令的常用命令行選項

命令行選項              含義
-C DIR              在讀取 makefile 之前改變到指定的目錄 DIR。
-f FILE             以指定的 FILE 文件作為 makefile。
-h                  顯示所有的 make 選項。
-i                  忽略所有的命令執行錯誤。
-I DIR              當包含其他 makefile 文件時,可利用該選項指定搜索目錄。
-n                  只打印要執行的命令,但不執行這些命令。
-p                  顯示 make 變量數據庫和隱含規則。
-s                  在執行命令時不顯示命令。
-w                  在處理 makefile 之前和之后,顯示工作目錄。
-W FILE             假定文件 FILE 已經被修改。
</PRE>

<P>
<BR><BR>
</P>

<P ALIGN=CENTER>
<IMG SRC="../images/striped.gif" NAME="Ruler" ALIGN=BOTTOM WIDTH=532 HEIGHT=13 BORDER=0></P>

<P>
<BR><BR>
</P>

<A HREF="compiler.html"><IMG SRC="prev.gif" ALT="Previous"></A>
<A HREF="utilities.html"><IMG SRC="next.gif" ALT="Next"></A>
<A HREF="index.html"><IMG SRC="toc.gif" ALT="Contents"></A>

</BODY>
</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费高清成人在线| 毛片av一区二区| 日韩一区二区三区在线观看| 91欧美一区二区| 亚洲国产精品久久久男人的天堂| 日韩欧美中文一区| 91麻豆精品在线观看| 久久不见久久见免费视频7 | 91国偷自产一区二区开放时间| 日本欧洲一区二区| 亚洲激情男女视频| 中文字幕精品三区| 精品欧美久久久| 在线电影欧美成精品| 91在线云播放| 风流少妇一区二区| 麻豆精品一区二区三区| 爽好久久久欧美精品| 中文字幕一区二区三区视频| xnxx国产精品| 日韩欧美精品在线| 欧美日韩二区三区| 欧美自拍偷拍午夜视频| 91网站最新地址| 国产a视频精品免费观看| 国模套图日韩精品一区二区| 日韩av网站在线观看| 亚洲成人午夜电影| 亚洲伊人伊色伊影伊综合网| 日韩伦理电影网| 国产精品看片你懂得| 国产欧美一区二区三区鸳鸯浴| 91精品久久久久久久久99蜜臂| 欧美三级韩国三级日本三斤| 在线亚洲欧美专区二区| 91啦中文在线观看| 色综合婷婷久久| 色哟哟精品一区| 色婷婷av久久久久久久| 日本丰满少妇一区二区三区| 色婷婷久久99综合精品jk白丝| 成人午夜在线播放| 不卡av在线免费观看| 成人免费三级在线| 不卡欧美aaaaa| 91在线丨porny丨国产| 91在线看国产| 91国产成人在线| 欧美日韩亚洲国产综合| 国产欧美日本一区二区三区| 久久男人中文字幕资源站| 337p日本欧洲亚洲大胆色噜噜| wwwwww.欧美系列| 国产精品免费丝袜| 亚洲欧美国产毛片在线| 亚洲精品大片www| 天堂蜜桃一区二区三区| 美国毛片一区二区三区| 国产福利精品导航| 99久久久久久| 欧美这里有精品| 8x8x8国产精品| 26uuu国产在线精品一区二区| 国产精品色哟哟| 亚洲老妇xxxxxx| 日韩av一级片| 国产成人精品免费一区二区| 91美女视频网站| 制服视频三区第一页精品| 2021国产精品久久精品| 最新不卡av在线| 午夜伊人狠狠久久| 国产激情91久久精品导航| 91一区二区在线观看| 欧美在线影院一区二区| 精品国产精品一区二区夜夜嗨| 欧美激情一二三区| 亚洲妇熟xx妇色黄| 国产高清不卡一区| 欧美久久久久久久久中文字幕| 久久精品一区二区三区不卡牛牛| 一个色综合av| 国产一区二区按摩在线观看| 91蜜桃免费观看视频| 精品少妇一区二区三区日产乱码| 综合久久久久久久| 老色鬼精品视频在线观看播放| 国产成a人亚洲精品| 欧美日韩精品三区| 欧美经典一区二区| 午夜久久久久久久久| 成人黄色综合网站| 91精品国产手机| 亚洲精品成人在线| 国产成人在线视频网站| 欧美日韩三级在线| 中文久久乱码一区二区| 91成人免费电影| 欧美电影免费观看高清完整版| 一区二区三区在线观看网站| 韩国一区二区三区| 欧美自拍偷拍午夜视频| 国产精品理论片在线观看| 久久激情五月婷婷| 欧美日韩精品欧美日韩精品一| 亚洲欧洲日本在线| 高清国产一区二区三区| 精品国产亚洲一区二区三区在线观看| 亚洲免费观看高清| 成人免费观看视频| 久久免费的精品国产v∧| 午夜一区二区三区视频| 色94色欧美sute亚洲线路一ni | 亚洲国产日韩一级| 成人国产精品免费| 精品成人免费观看| 美女免费视频一区二区| 欧美精品色一区二区三区| 亚洲一区二区三区视频在线播放| 成人小视频在线| 国产日韩精品视频一区| 精品亚洲国产成人av制服丝袜| 91精品国产一区二区三区| 亚洲成人1区2区| 欧美日韩二区三区| 亚洲一区在线视频| 91国偷自产一区二区开放时间 | 亚洲欧美综合另类在线卡通| 国产成人99久久亚洲综合精品| 亚洲精品在线网站| 久久99精品网久久| 日韩一区二区影院| 日韩精品福利网| 欧美一区二区三区影视| 日韩 欧美一区二区三区| 欧美一区二区精美| 免费在线视频一区| 日韩一区二区三区免费看| 日日夜夜精品视频天天综合网| 欧美系列日韩一区| 亚洲福利国产精品| 9191久久久久久久久久久| 日韩专区在线视频| 日韩亚洲欧美在线| 日本美女一区二区三区| 亚洲美女少妇撒尿| 在线视频欧美精品| 爽好多水快深点欧美视频| 在线成人高清不卡| 日本中文在线一区| 精品999在线播放| 成人黄色a**站在线观看| 亚洲视频一区在线观看| 欧美日韩一区二区三区视频| 午夜国产不卡在线观看视频| 91精品国产欧美一区二区| 精品一区二区成人精品| 欧美国产精品一区二区| 色偷偷久久人人79超碰人人澡| 亚洲精品中文字幕乱码三区 | 在线看不卡av| 丝袜诱惑制服诱惑色一区在线观看 | 国产欧美一区二区三区在线看蜜臀 | 日本成人在线一区| 久久综合九色综合97婷婷| voyeur盗摄精品| 一区二区免费在线| 日韩欧美成人激情| 成人h精品动漫一区二区三区| 一区二区三区四区在线播放| 91精品国产综合久久精品麻豆| 国产在线视频精品一区| 亚洲视频一区在线观看| 日韩一区二区不卡| 成人听书哪个软件好| 性欧美大战久久久久久久久| 久久久青草青青国产亚洲免观| 色综合久久综合网| 九色porny丨国产精品| 国产精品三级视频| 欧美剧情片在线观看| 国产成人在线免费观看| 亚洲一级二级三级在线免费观看| 26uuu成人网一区二区三区| 色爱区综合激月婷婷| 国产一区二区视频在线播放| 亚洲男人的天堂在线aⅴ视频| 欧美精品在线一区二区三区| 波多野结衣亚洲| 毛片一区二区三区| 一区二区三区四区蜜桃| 国产日韩av一区| 91精品国产综合久久精品图片 | 亚洲制服丝袜av| 国产免费久久精品| 欧美一区二区免费| 91免费看`日韩一区二区| 久久精工是国产品牌吗| 亚洲成人动漫av| 中文幕一区二区三区久久蜜桃|