原始檔——中間目標檔案——執行檔案。在編譯時,編譯器只檢測程式語法,和函式、變數是否被宣告。如果函式未被宣告,編譯器會給出乙個警告,但可以生成object file。而在鏈結程式時,鏈結器會在所有的object file中找尋函式的實現,如果找不到,那到就會報鏈結錯誤碼(linker error)。 給中間目標檔案打個包,叫「庫檔案」。
make命令根據 gnumakefile或makefile或
makefile
編譯鏈結。 make的「-f」和「--file」引數指定makefile檔案。找檔案中的第乙個目標檔案(target)。規則:編譯針對沒編譯過的或修改了的檔案。 make會一層又一層地去找檔案的依賴關係。
target可以是乙個object file(目標檔案),也可以是乙個執行檔案,還可以是乙個標籤(label)。
prerequisites就是,要生成那個target所需要的檔案或是目標。
command也就是make需要執行的命令。(任意的shell命令)
一定要以乙個tab鍵作為開頭。也可以在prerequisites加分號後面
變數:obj= file1.o file2.o 使用:$(obj) 好處:方便修改;
隱晦規則( 自動推導命令和檔案):根據test.o自動新增test.c 和cc -c test.c; eg: $(objects) : defs.h;kbd.o command.o files.o : command.h
偽目標檔案:.phony : clean; 「.phony」 避免和檔案重名,表示clean是個偽目標檔案 。-rm中的-代表忽略錯誤繼續執行。 clean從來都是放在檔案的最後。 偽目標也可以指定所依賴的檔案,一口氣生成若干個可執行檔案。 .phony : 可以不寫,但 建議:顯式寫出是乙個好習慣。
makefile自動生成依賴:.d檔案,gcc -mm main.c——main.o:main.c main.h
靜態模式: 自動化變數「$<」表示所有的依賴目標集,「$@」表示目標集。
: :多目標: bigoutput littleoutput : text.g
generate text.g -$(subst output,,$@) > $@
makefile裡主要包含了五個東西:顯式規則、隱晦規則、變數定義、檔案指示(1,引用檔案;2, 指定makefile中的有效部分;3, 定義乙個多行的命令)和注釋(#)。
引用:-include foo.make *.mk$(bar)。-表示忽略錯誤繼續執行。尋找:當前目錄—— 「-i」或「--include-dir」引數指定目錄——系統include目錄;先警告、繼續下面的、結束後重新找前面過不去的、還是不行就發出錯誤,-可以忽略錯誤。 在include前面可以有一些空字元,但是絕不能是[tab]鍵開始。
環境變數makefiles:所有make命令都會引用它(故 一定不要設定這個變數 )。環境變數makefile的「目標」不會起作用,如果環境變數中定義的檔案發現錯誤,make也會不理。
規則包含兩個部分,乙個是依賴關係,乙個是生成目標的方法。第一條規則中的目標將被確立為最終的目標。如果第一條規則中的目標有很多個,那麼,第乙個目標會成為最終的目標。
make步驟:1,讀入所有的makefile。2,讀入被include的其它makefile。3,初始化檔案中的變數。4,推導隱晦規則,並分析所有規則。5,為所有的目標檔案建立依賴關係鏈。6,根據依賴關係,決定哪些目標要重新生成。7,執行生成命令。
萬用字元:「*」,「?」和「~」(使用者主目錄)
makefile檔案搜尋:1,特殊變數: vpath = src:../headers 2, 「vpath」關鍵字1、vpath :為符合模式的檔案指定搜尋目錄。「%」的意思是匹配零或若干字元2、vpath :清除符合模式的檔案的搜尋目錄。3、vpath :清除所有已被設定好了的檔案搜尋目錄。
「@」字元在命令行前,這個命令將不被make顯示出來
make執行時,帶入make引數「-n」或「--just-print」,那麼其只是顯示命令,但不會執行命令. make引數「-s」或「--slient」則是全面禁止命令的顯示.
命令出錯:1,使用-忽略單個命令錯誤。2,全域性方法:make -i或 --ignore-errors。3, 規則是以「.ignore」作為目標的,那麼這個規則中的所有命令將會忽略錯誤。4, make的引數的是「-k」或是「--keep-going」則中止此 規則 ,繼續其他規則。
定義命令包:命令序列的語法以「define」開始,以「endef」結束。使用:$(命令包名)。
巢狀執行:cd subdir && $(make)。 總控makefile的變數傳遞到下級的makefile中,但是不會覆蓋下層的makefile中所定義的變數,除非指定了「-e」引數。
(不)向下層makefile傳遞變數variable...:(un)export ;可以向下層傳遞所有變數,只需export就行了
「-w」或是「--print-directory」會在make的過程中輸出一些資訊,讓你看到目前的工作目錄。如 make: entering directory `/home/hchen/gnu/make'.
「-c」引數來指定make下層makefile時,「-w」會被自動開啟的。如果引數中有「-s」(「--slient」)或是「--no-print-directory」,那麼,「-w」總是失效的。
makefile複習筆記3
函式呼叫 思考如何定義乙個 空格 變數 bar subst space comma foo 把 foo 中 space 換成 comma 字串處理函式 subst,patsubst,strip,findstring,filter,filter out,sort,word,wordlist,words...
HTML 複習筆記 1
html格式化 html 樣式 外部樣式表 當瀏覽器讀到乙個樣式表,它就會按照這個樣式表來對文件進行格式化。有以下三種方式來插入樣式表 當樣式需要被應用到很多頁面的時候,外部樣式表將是理想的選擇。使用外部樣式表,你就可以通過更改乙個檔案來改變整個站點的外觀。當單個檔案需要特別樣式時,就可以使用內部樣...
Linux 複習筆記1
1.linux嚴格區分大小寫 2.linux所有內容以檔案形式儲存,包括硬體 3.linux不靠副檔名區分檔案型別 壓縮包 gz,bz2,tar.bz2 tgz等 二進位制軟體包 rpm 指令碼檔案 sh 配置檔案 conf 分割槽每個block大小為4k 1.擁有相同的i節點和儲存block塊,可...