1. 程式人生 > >linux makefile學習筆記(1)

linux makefile學習筆記(1)

二、一個示例

正如前面所說的,如果一個工程有3個頭檔案,和8個C檔案,我們為了完成前面所述的那三個規則,我們的Makefile應該是下面的這個樣子的。

edit : main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o


main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c

command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c

clean :
rm edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o

反斜槓(/)是換行符的意思。這樣比較便於Makefile的易讀。我們可以把這個內容儲存在檔案為“Makefile”或“makefile”的檔案中,然後在該目錄下直接輸入命令“make”就可以生成執行檔案edit。如果要刪除執行檔案和所有的中間目標檔案,那麼,只要簡單地執行一下“make clean”就可以了。

在這個makefile中,目標檔案(target)包含:執行檔案edit和中間目標檔案(*.o),依賴檔案(prerequisites)就是冒號後面的那些 .c 檔案和 .h檔案。每一個 .o 檔案都有一組依賴檔案,而這些 .o 檔案又是執行檔案 edit 的依賴檔案。依賴關係的實質上就是說明了目標檔案是由哪些檔案生成的,換言之,目標檔案是哪些檔案更新的。

在定義好依賴關係後,後續的那一行定義瞭如何生成目標檔案的作業系統命令,一定要以一個Tab鍵作為開頭。
記住,make並不管命令是怎麼工作的,他只管執行所定義的命令。make會比較targets檔案和prerequisites檔案的修改日期,如果prerequisites檔案的日期要比targets檔案的日期要新,或者target不存在的話,那麼,make就會執行後續定義的命令。

這裡要說明一點的是,clean不是一個檔案,它只不過是一個動作名字,有點像C語言中的lable一樣,其冒號後什麼也沒有,那麼,make就不會自動去找檔案的依賴性,也就不會自動執行其後所定義的命令。要執行其後的命令,就要在make命令後明顯得指出這個lable的名字。這樣的方法非常有用,我們可以在一個makefile中定義不用的編譯或是和編譯無關的命令,比如程式的打包,程式的備份,等等。

相關推薦

linux makefile學習筆記1

二、一個示例 正如前面所說的,如果一個工程有3個頭檔案,和8個C檔案,我們為了完成前面所述的那三個規則,我們的Makefile應該是下面的這個樣子的。 edit : main.o kbd.o command.o display.o / insert.o search.o files.o utils.occ -

linux makefile學習筆記4

四、巢狀執行make 在一些大的工程中,我們會把我們不同模組或是不同功能的原始檔放在不同的目錄中,我們可以在每個目錄中都書寫一個該目錄的Makefile,這有利於讓我們的Makefile變得更加地簡潔,而不至於把所有的東西全部寫在一個Makefile中,這樣會很難維護我們的Makefile,這個技術對於我們模

linux makefile學習筆記5

五、定義模式規則 你可以使用模式規則來定義一個隱含規則。一個模式規則就好像一個一般的規則,只是在規則中,目標的定義需要有"%"字元。"%"的意思是表示一個或多個任意字元。在依賴目標中同樣可以使用"%",只是依賴目標中的"%"的取值,取決於其目標。 有一點需要注意的是,"%"的展開發生在變數和函式的展開之後,變

linux學習筆記1

1 linux之父是linus Torvalds(李納斯 托沃滋),1991年他在赫爾辛基大學讀書時自己手動寫了一個電腦操作系統,取名linux,並且公布了源代碼。 C語言之父是Dennis M Ritchie(丹尼斯 裏奇)。 JAVA之父是詹姆斯高斯林,出生在加拿大,他編寫了多處理器版本的unix操

Linux第三周學習筆記1

命令 hiho 並且 ron 增加 如果 mkdir strong lin Linux第三周學習筆記(1)2.20 特殊權限stick_bit特殊權限stick_bit:意為防刪除位。文件是否可以被某一個用戶刪除,主要取決於該文件所在目錄是否對該用戶具有寫的權限。如果沒有寫

linux高性能編程學習筆記1

linuxTCP/TP協議族:分層、多協議的通信體系,四層協議系統,自底向上:數據鏈路層、網絡層、傳輸層、應用層數據鏈路層:實現網卡接口的網絡驅動程序,以處理數據在物理媒介上得到傳輸數據鏈路層兩個常用的協議:ARP協議(地址解析協議)、RARP協議(逆地址解析協議)網絡層:實現數據包的選路和轉發網絡層最核心的

Linux學習筆記1linux的開關機及重啟

baidu 方式 圖形界面 class bsp har boot init5 ida linux的啟動流程 一、啟動 (1)電源 開關   (2)選擇啟動方式:FLOPPY/BIOS/CDROM(軟盤/bios啟動/光盤) 基於MBR引導方式 【1】MBR:最多只能劃分4

linux 監控效能學習筆記1

 top命令中的 load average後面的三個數字分別表示距離現在一分鐘,五分鐘,十五分鐘的負載情況。   在單核系統中100%利用負載標識為1.00,雙核系統標識2.00 四核系統標識為4.00 因此,有一個 14 load average值和 24個 核心的負載

Kafka學習筆記1----Kafka的簡介和Linux下單機安裝

1. Kafka簡介   Kafka is a distributed,partitioned,replicated commit logservice。它提供了類似於JMS的特性,但是在設計實現上完全不同,此外它並不是JMS規範的實現。kafka對訊息儲存時根據Topic進行歸類,傳送訊息者成為Produ

linux學習筆記1linux基礎知識

1.linux是什麼? Linux這個詞本身只表示Linux核心,但實際上人們已經習慣了用Linux來形容整個基於Linux核心,並且使用GNU 工程各種工具和資料庫的作業系統。 2. 什麼是shell 保護系統核心並對外提供操作介面的軟體 在linux中預設的

Linux學習筆記 1

1.  名詞解釋 GNU: 目標是建立一套完全自由的作業系統;包含了可自由使用的軟體,如Emacs,GCC,Tex,X Window;制定了3個自由軟體協議:GPL,LGPL,GFDL GPL(General Public License):軟體以原始碼形式釋出;只要軟體中使用了被GPL協議保護

Linux系統程式設計學習筆記1-檔案的I/O操作

概述 在Linux系統下,通常以一個非負整數來代指一個開啟的檔案,這些檔案可以包括終端,socket,裝置,普通檔案等等。規定的三個標準的檔案描述符為0,1,2下面分別介紹(在互動式shell中,這些檔案描述符通常指向shell執行所在的終端): 檔案描述

【鳥叔的Linux私房菜】學習筆記1——Linux系統入門

雖然現在工作一直在用Xshell 一些 基本的命令、常用的還可以, 但總感覺對Linux瞭解的知之甚少,偶爾改個檔案還需要請教同事,真是慚愧。 所以決定從今天開始重新學習下Linux,查漏補缺,並將學習的結果作為筆記和大家一塊交流和進步,就開始我們今天的學習吧。 一

嵌入式Linux學習筆記1

一、基本概念 1、檔案系統:對計算機資料的分類儲存。 2、檔案和目錄:對資料的一種分類。 3、/:(1)作根目錄名(處於開頭);(2)作分割符(不在開頭)。 4、路徑: (1)絕對路徑:從”/”目錄出發的路徑;如:/home/linux/截圖軟體。

.NET Core學習筆記1——在Linux下執行Console APP

都說.NET Core可以跨平臺,說實話Linux咱也不太懂,咱也不敢問。怎樣把一個簡單的Console App在Linux下跑起來,真是費了我一番功夫。特做此篇以供指北。 .NET Core的大餅我就不替某軟畫了。接下來我們就做個傻瓜教程,把Visual Studio 2019(VS2017也可以)開發的

JAVA學習筆記1——a++與++a的區別

col int 演示 opera 解析 代碼 數據 ++i div 需求:此博客用於解釋i++與++i的區別。 過程: 1、名稱解釋 ++:自增,即在原有數據基礎上+1,再賦給原有數據。 2、程序演示 (1)代碼: 1 class OperateDemo 2 { 3

vray學習筆記1

com .cn 過程 分組 是把 皮膚 mon image 基本 vray是個什麽東西? 它是個渲染器。 渲染器是個什麽東西? 渲染器就是3d軟件裏面把模型畫成一張圖片的東西,渲染的過程就是把3D物體變成2D畫面的過程。 模型是個什麽東西? 模型就是模型,它由兩部分組成,第

《深入理解C指針》學習筆記1--- 指針之外

結構 def form 學習 編程 stdlib.h struct 一個 char   C語言從誕生之初就非常善於和硬件打交道,經過這麽多年的發展之後,其靈活性和超強的特征是受到幾乎所有程序員的肯定。C語言的這種靈活性很大一部分程度來源與C指針,指針為C語言動態操控內存提供

CS231n 學習筆記1 Image CLassification

eight function 分享 便是 數據驅動 rain 分類問題 很難 特征 圖像分類是計算機視覺中的一項核心任務,那麽什麽是圖像分類? 例如,給你一個標簽集,其中包括(貓、狗、鳥、卡車、飛機...等) 然後給你一張圖片,那麽這張圖片屬於哪個類別呢?這就是一個分類

bootstrap 學習筆記1---介紹bootstrap和柵格系統

優先 cal 圖片 應用 尺寸 文件中 lin png ice   學習前端許久,對於布置框架和響應瀏覽器用html 和javascript 寫的有點繁瑣,無意間看到這個框架,覺得挺好用的就開始學習了,但是這個框架上面有很多知識,不是所有的都要學的,故將學習筆記和覺得重點的