學習Makefile的第一章 定義符

2021-09-12 08:42:08 字數 2026 閱讀 9065

個人筆記系列:

認識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 什麼是機器學習 機器學習不同於以往的計算機程式設計,致力於研究如何通過計算機手段,利用以往的經驗來改善系統自身的效能。一般的程式設計都是明確的告訴電腦該做什麼。機器學習希望提供資料給學習演算法,讓它自己學習,找到其種的規律。在面對新情況的時候就能應用已產生的模型,提供相應的判斷。機器學習的本質任...