freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

gnumake中文手冊v38學(xué)習(xí)780393736_完整-資料下載頁

2024-11-07 13:16本頁面

【導(dǎo)讀】冊”,工夫不負(fù)有心人.鏈接器將.o文件中使用的函數(shù)和其它.o或者庫文件中的相關(guān)符號進(jìn)行合。件最終生成可執(zhí)行程序。Linux中,共享庫文件格式通常為“ELF”格式。模塊中各個成員的地址都是相對地址。員對象可被執(zhí)行。在make讀取Makefile以后會建立一個編譯過程的描述數(shù)據(jù)庫。則所有包含此頭文件的C源。文件在本次執(zhí)行make時將會被重新編譯。以使我們的Makefile書寫清晰、容易閱讀理解。規(guī)則的命令行,而由make自身決定使用默認(rèn)命令。此默認(rèn)規(guī)則稱為make. 盡量避免多目標(biāo),單依賴。這樣后期維護(hù)也會非常方便,而且Makefile會更清晰、明了?!癷nclude”指示符告訴make暫停讀取當(dāng)前的Makefile,而轉(zhuǎn)去讀取。Maekfile中表示文件名時可使用通配符。在Makefile中,它被展開為已經(jīng)存在的、使用空格分開的、匹配此模式。后將列表中所有文件名的后綴.c替換為.o。

  

【正文】 FLAGS) $(CPPFLAGS) c $ o $*.o $(AR) r $@ $*.o $(RM) $*.o ? 基本的約定 本節(jié)討論書寫 Makefile 時應(yīng)遵循的一些基本約定,由于不同版本 make之間的差異??赡茉?GNU make 環(huán)境中正常工作的 Makefile,換成其它版本的 make 執(zhí)行時會發(fā)生錯誤。為了最大可能的兼容不同版本的 make,這里給出了一些基本的約定。 1. 所有的 Makefile 中應(yīng)該包含這樣一行: SHELL = /bin/sh 其目的是為了避免變量 “SHELL” 在有些系統(tǒng)上可能繼承同名的系統(tǒng)環(huán)境變量而導(dǎo) 致錯誤。雖然在 GNU版本的 make 中不會出現(xiàn)這種問題( GNU make中變量 “SHELL” 的默認(rèn)值是 “/bin/sh” ,它不同于系統(tǒng)環(huán)境變量“SHELL” )。 2. 小心處理后綴和隱含規(guī)則。不同 make 可識別后綴和隱含規(guī)則可能不同,它可能會導(dǎo)致混亂或者錯誤。因此在特定 Makefile 中明確限定可識別的后綴是一個不錯的主意。在 Makefile 中應(yīng)該這樣做: .SUFFIXES: .SUFFIXES: .c .o 第一行首先取消掉 make 默認(rèn)的可識別后綴列表,第二行重新指定可識別的后綴列表。 當(dāng)規(guī)則只有一個依賴 文件時。應(yīng)該使用自動化變量 “$” 和 “$@” 代替出現(xiàn)在命令的依賴文件和目標(biāo)文件(其它版本的 make,只在隱含規(guī)則中設(shè)置自動化變量 “$” )。對于一個這樣的規(guī)則: : $(CC) – I. – I$(srcdir) $(CFLAGS) – c – o 我們在 Makefile 中應(yīng)該以這種方式來書寫: : $(CC) – I. – I$(srcdir) $(CFLAGS) – c $ – o $@ 另外,對于有多個依賴的規(guī)則,為了規(guī)則能 被正確執(zhí)行。應(yīng)該在規(guī)則的命令行中明確的指定文件的完整路徑名。例如第一個例子就可以這樣寫(需要在規(guī)則之前使用 “VPATH” 指定搜索目錄): : sedscript sed – e $(srcdir)/sedscript $(srcdir)/ $@ 重建或者安裝目標(biāo)(一般是偽目標(biāo))的命令行可使用編譯器或者相關(guān)工具程序,這些命令使用一個變量來表示。這樣做的好處是:當(dāng)修改一個命令時,只需要更改代表命令的變量的值就可以了。對于以下的這些命令程序: ar bison cc flex install ld ldconfig lex make makeinfo ranlib texi2dvi yacc 在規(guī)則中的命令中,使用以下這些變量來代表它們: $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG)$(LEX) $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) 如果規(guī)則的命令行需要使用 “ranli b” 或者 “l(fā)dconfig” 等這些工具時,需要考慮當(dāng)前的系統(tǒng)是否支持這些工具。當(dāng)在不支持它的系統(tǒng)中執(zhí)行包含此命令的規(guī)則時,要能夠給出提示信息(提示原因是告訴用戶系統(tǒng)不支持此命令,但不應(yīng)該出現(xiàn)錯誤而退出執(zhí)行)。 在我們書寫的 Makefile 中應(yīng)該講所有的命令、選項(xiàng)作為變量定義,方便后期對命令的修改和對選項(xiàng)的修改。就是說用戶可以通過修改一個變量值來重新指定所要執(zhí)行的命令,或者來控制命令執(zhí)行的選項(xiàng)、參數(shù)等。 當(dāng)使用變量來表示命令時,如果規(guī)則中需要使用此命令時,可通過引用代表此命令的變量來實(shí)現(xiàn)。例如:定義變量 “ CC = gcc” ,規(guī)則中就可使用“$(CC)” 來引用 “gcc” 。對于一些件管理器工具如 “l(fā)n” ,“rm”“mv” 等,可以不為它們定義變量,而直接使用。 所 有命令執(zhí)行的參數(shù)選項(xiàng)也應(yīng)該定義一個變量(可稱為命令的選項(xiàng)變量)。在命令變量(代表一個命令的變量)后添加 “FLAGS” 來命名這個選項(xiàng)變量。例如:變 量 “CFLAGS” 是 c編譯器(命令變量為 “CC” )的命令行選項(xiàng)變量;變量 YFLAGS 時命令 “yacc” (命令變量為 “YACC” )選項(xiàng)變量;變量 “LDFLAGS” 是命令 “l(fā)d” (命令變量為 “LD” )的選項(xiàng)變量 等。在所有需要執(zhí)行預(yù)處理的命令行應(yīng)該使用變量 “CCFLAGS” 作為gcc 的執(zhí)行參 數(shù);同樣任何需要執(zhí)行鏈接的命令行中使用 “LDFLAGS” 作為命令的執(zhí)行參數(shù)。 c編譯器 的編譯選項(xiàng)變量 “CFLAGS” 在 Makefile中通常是為編譯所有的源文件提供選項(xiàng)變量。為編譯一個特定文件增加的選項(xiàng),不應(yīng)包含在變量 “CFLAGS” 中。編譯特定文件(或者一類特定文件)時,如果需要使用特 定的選項(xiàng)參數(shù),可以將這些選項(xiàng)寫在編譯它所執(zhí)行規(guī)則的命令行中(也可以使用目標(biāo) 指定變量或者模式指定變量)。 在所有編譯命令行中,變量 “CFL AGS” 應(yīng)該放在編譯選項(xiàng)列表的最后。這樣可以保證當(dāng)命令行參數(shù)出現(xiàn)重復(fù)時, “CFLAGS” 始終效的。另外,在任何調(diào)用 c編譯器的命令行中都應(yīng)該使用選項(xiàng)變量 “CFLAGS” ,無論是進(jìn)行編譯還是連接。 如 果需要在 Makefile 中實(shí)現(xiàn)文件安裝的規(guī)則,那么就需要在 Makefile中定義變量 “INSTALL” 。此變量代表安裝命令( install)。同 時在Makefile 中也需要定義變量 “INSTALL_PROGRAM” 和 “INSTALL_DATA”( “INSTALL_PROGRAM” 的缺省值 都是 “$(INSTAL L)” ;“INSTALL_DATA” 的缺省值是 “${INSTALL} – m 644” )。可以使用這些變量,來安裝可執(zhí)行程序或者非可執(zhí)行程序到指定位置。例如: $(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) $(libdir)/ 所有 GNU 發(fā)布的軟件包的 Makefile 中,必須包含以下這些目標(biāo): all 此目標(biāo)的動作是編譯整個軟件包。 “all” 應(yīng)該為 Makefile 的終極目標(biāo)。該目標(biāo)的動作不重建任何文檔(只編譯所有 的源代碼,生成可執(zhí)行程序);Info 文件應(yīng)該作為發(fā)布文件的一部分, DVI文件只在明確指定的時候才應(yīng)該被重建。 缺省情況下,對所有源程序的編譯和連接應(yīng)該使用選項(xiàng) “ g” ,是最終的可執(zhí)行程序中包含調(diào)試信息。當(dāng)最終的可執(zhí)行程序不需要包含調(diào)試信息 時,可使用 “strip” 去掉可執(zhí)行程序中的調(diào)試符號以減小最終的程序大小。 install 此目標(biāo)的動作是完成程序的編譯并將最終的可執(zhí)行程序、庫文件等拷貝到安裝的目錄。如果只是驗(yàn)證這些程序是否可被正確安裝,它的動作應(yīng)該是一個測試安裝動作。 安裝時一般不要對可執(zhí)行程序進(jìn)行 strip(去掉可執(zhí)行程序內(nèi)部的調(diào)試信息)。存在另外一個目標(biāo) “install strip” ,它實(shí)現(xiàn)安裝的同時完成對可執(zhí)行程序 strip。 保證目標(biāo) “install” 的動作不更改程序創(chuàng)建目錄( builid 目錄)下的任何文件,對這個目錄下文件的修改(重建或者更新)是目標(biāo) “all” 所要定義的動作。 uninstall 刪除所有已安裝文件 —— 由 install 創(chuàng)建的文件拷貝。規(guī)則所定義的命令不能修改編譯目錄下的文件,僅僅是刪除安裝目錄下的文件。像 install目標(biāo)的命令一樣, uninstall 目標(biāo)的命令也分為三類。 installstrip 和目標(biāo) install 的動作類似,但是 installstrip 指定的命令在安裝時對可執(zhí)行文件進(jìn)行 strip(去掉程序內(nèi)部的調(diào)試信息)。它的定義如下: installstrip: $(MAKE) INSTALL_PROGRAM=39。$(INSTALL_PROGRAM) s39。 install 如果軟件包的存在安裝腳本時,目標(biāo) installstrip 所定義的命令就不能是對目標(biāo) “install” 的引用,它僅僅完成對可執(zhí)行文件的 strip。 “install strip” 不應(yīng)該直接在 build目錄下對可執(zhí)行文件進(jìn)行 strip,應(yīng)該是對安裝目錄下的可執(zhí)行文件進(jìn)行 strip。就是說“install strip” 所定義的命令不能對 build 目錄下的文件產(chǎn)生影響。 一般不建議安裝時對可執(zhí)行文件進(jìn)行 strip,因?yàn)槿サ艨蓤?zhí)行文件的調(diào)試信息后,如果在程序中存在 bug,就不能通過 gdb 對程序進(jìn)行調(diào)試。 clean 清除當(dāng)前目錄下編譯生成的所有文件,這些文件在 make 過程中產(chǎn)生。注意, clean 動作不能刪除軟件包的配置文件,同時也不能刪除 build 時創(chuàng)建的那些文件(諸如:目錄、 build 生成的信息記錄文件等 )。因?yàn)檫@些文件都是發(fā)布版本的一部分。 對于 .dvi 文件,當(dāng)它不作為發(fā)布版本的一部分時,可以刪除。 distclean 類似于目標(biāo) clean,但增加刪除當(dāng)前目錄下的的配置文件、 build 過程產(chǎn)生的文件。目標(biāo) “distclean” 指定的刪除命令應(yīng)該刪除軟件包中所有非發(fā)布文件。 dist 此目標(biāo)指定的命令創(chuàng)建發(fā)布程序的 tar 文件。創(chuàng)建的 tar文件應(yīng)該是這個軟件包的目錄,文件名中也可以包含版本號(就是說創(chuàng)建的 tar 文件在解包之后應(yīng)該是一個目錄)。例如,發(fā)布的 gcc 版的 tar 文件解包的目錄為 “gcc ” 。 通常的做法是是創(chuàng)建一個空目錄,如使用 ln 或 cp 將所需要的文件加入到這個目錄中,之后對這個目錄使用 tar 進(jìn)行打包。打包之后的 tar文件使用 gzip 壓縮。例如,實(shí)際的 gcc 版的發(fā)布文件叫“gcc ” 。 目標(biāo) “dist” 的依賴文件為軟件包中所有的非源代碼的文件,因此在使用目標(biāo)進(jìn)行發(fā)布軟件打包壓縮之前必須保證這些文件是最新的。
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1