個人筆記系列:
認識makefile裡面常用變數:
ps:什麼是目標檔案,什麼是依賴目標檔案????
hell.o:main.c
gcc main.c -c hello.o
注:目標檔案就是hello.o 依賴於main.c 。全文意思就是hello.o是依賴於main.c所生成的,
下面是表達怎麼生成這麼hello.o檔案呢?是通過gcc 編譯生成的。
常用例項一、
deco:main.o temp_1.o temp_2.o temp_3.o
gcc -o deco temp_1.o temp_2.o temp_3.o
使用我們的定義符之後,減少了很多的工作
deco:main.o temp_1.o temp_2.o temp_3.o
gcc -o deco $^
由上面可以看到$^ 就等於上面的所有的依賴目標(temp_1.o temp_2.o temp_3.o)
變數二: $@
表示目標檔案的集合,要是編譯多目標,那麼就相當於匹配目標中模式定義的集合。
常用例項二、
deco:main.o temp_1.o temo_2.o temp_3.o
gcc -o deco $^
使用這個定義符之後表達為
deco:main.o temp_1.o temo_2.o temp_3.o
gcc -o $@ $^
我們的目標檔案是 deco 可以有$@替代
變數三: $?
一般在程式設計上面看到問號,不自覺地想象它是乙個帶有比較功能的符號,在這個也的確如此。它表示比目標還要新的依賴檔案列表 。這裡面關係到makefile的乙個時間戳概念。意義就是進行更新時間的比較,一般在更新庫或者日誌這方面用到。
常用例項三、
lib_dev:main.o temp_1.o temp_2.o
ar -r lib_dev $?
意思就是更新依賴檔案的集合,(ar -r) 鏈結庫如果依賴目標在則替換它,如果不在
就加進最後一次修改過的依賴目標。如果temp_1.o更新了,那麼$?集合裡面只有
temp_1.0,如果main.o temp_1.o都更新了,那麼集合裡面即有main.o 和 temp_1.o.
變數四: $<
1、依賴目標中的第乙個目標,
2、如果依賴目標是以模式定義的,那麼這個定義符是符合模式的一系列的檔案集 合。分成兩段概念來看這個定義符。
首先實現第一段概念:例項4.1
hello.o:main.c sys_dev.c sys_lib.c
gcc -c hello.o $<
這裡使用的 $< 依賴目標中的第乙個目標,也就是例項中的 main.c 然後編譯成hello.o,其他的依賴就不進行編譯了。
咋一看這個這樣的用法好像有點神經病啊。請看下乙個例項
實現第二段概念:例項4.2 ps:(%.o == 所有的.o檔案),(%.c == 所有的.c 檔案),
%.o:%.c
gcc -o $@ $<
那麼在上面例項中$《是代表在乙個乙個地將.c檔案取出來進行編譯。有多少個.c檔案 那麼就對 應著生成多少個.o檔案。
例項4.2將其轉換成平常寫法:假設只有三個.c的檔案,例項4.2的作用等同於下面例項4.3.
例項4.3:
sys_dev.o:sys_dev.c
gcc -c sys_dev.o sys_dev.c
sys_serve.o:sys_serve.c
gcc -o sys_serve.o sys_serve.c
sys_bin.c:sys_bin.c
gcc -o sys_bin.o sys_bin.c
執行過後就會產生三個.o的檔案。和例項4.2的作用是一樣的。
第一章學習筆記
看c primer已經好幾遍了,但是還是有很多基礎的問題,總是那樣容易忘記,這次看的時候,決定好好的寫寫讀書筆記 希望能夠認真的堅持下去。incluede的兩種不同格式 include some file 表明檔案是乙個標準工程,查詢先檢查預定義的目錄。include my file 表明改檔案是使...
Linux學習 第一章
1.linux應用程式 可執行檔案 計算機可以直接執行的程式 的.bat cmd 檔案。2 path 變數,新增路徑,使用 分隔 3 linux 使用正斜線 分隔檔名裡的目錄名,4 標頭檔案 提供對 常量的定義和對系統函式及庫函式 呼叫的宣告 一般位於 usr include 目錄及其子目錄中 依賴...
機器學習第一章
q 什麼是機器學習 機器學習不同於以往的計算機程式設計,致力於研究如何通過計算機手段,利用以往的經驗來改善系統自身的效能。一般的程式設計都是明確的告訴電腦該做什麼。機器學習希望提供資料給學習演算法,讓它自己學習,找到其種的規律。在面對新情況的時候就能應用已產生的模型,提供相應的判斷。機器學習的本質任...