Makefile學習筆記06 make的執行

2021-09-27 07:32:58 字數 1676 閱讀 8920

make的退出碼

0 —— 表示成功執行。

1 —— 如果make執行時出現任何錯誤,其返回1。

2 —— 如果你使用了make的「-q」選項,並且make使得一些目標不需要更新,那麼返回2。

指定makefile

gnu make找尋預設的makefile的規則是在當前目錄下依次找三個檔案——「gnumakefile」、「makefile」和「makefile」。其按順序找這三個檔案,一旦找到,就開始讀取這個檔案並執行。

make –f hchen.mk

指定目標

「all」              這個偽目標是所有目標的目標,其功能一般是編譯所有的目標。

「clean」 這個偽目標功能是刪除所有被make建立的檔案。

「install」 這個偽目標功能是安裝已編譯好的程式,其實就是把目標執行檔案拷貝到指定的目標中去。

「print」 這個偽目標的功能是例出改變過的原始檔。

「tar」 這個偽目標功能是把源程式打包備份。也就是乙個tar檔案。

「dist」 這個偽目標功能是建立乙個壓縮檔案,一般是把tar檔案壓成z檔案。或是gz檔案。

「tags」 這個偽目標功能是更新所有的目標,以備完整地重編譯使用。

「check」和「test」 這兩個偽目標一般用來測試makefile的流程。

檢查規則

make引數

隱含規則

1、編譯c程式的隱含規則。

「.o」的目標的依賴目標會自動推導為「.c」,並且其生成命令是「$(cc) –c $(cppflags) $(cflags)」

2、編譯c++程式的隱含規則。

「.o」 的目標的依賴目標會自動推導為「.cc」或是「.c」,並且其生成命令是「$(cxx) –c $(cppflags) $(cflags)」。(建議使用「.cc」作為c++原始檔的字尾,而不是「.c」)

3、編譯pascal程式的隱含規則。

「.o」的目標的依賴目標會自動推導為「.p」,並且其生成命令是「$(pc) –c $(pflags)」。

$@表示規則中的目標檔案集。在模式規則中,如果有多個目標,那麼,"$@"就是匹配於目標中模式定義的集合。

$%僅當目標是函式庫檔案中,表示規則中的目標成員名。例如,如果乙個目標是"foo.a(bar.o)",那麼,"$%"就是"bar.o","$@"就是"foo.a"。如果目標不是函式庫檔案(unix下是

[.a],windows下是[.lib]),那麼,其值為空。

$<

依賴目標中的第乙個目標名字。如果依賴目標是以模式(即"%")定義的,那麼"$<"將是符合模式的一系列的檔案集。注意,其是乙個乙個取出來的。

$?所有比目標新的依賴目標的集合。以空格分隔。

$^所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重複的,那個這個變數會去除重複的依賴目標,只保留乙份。

$+這個變數很像"$^",也是所有依賴目標的集合。只是它不去除重複的依賴目標。

$*這個變數表示目標模式中"%"及其之前的部分。如果目標是"dir/a.foo.b",並且目標的模式是"a.%.b",那麼,"$*"的值就是"dir /a.foo"。

makefile學習筆記 makefile概述

20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...

Makefile學習筆記

makefile for boot asm nasm 定義變數 asmflags i include run qemu system i386 hdd boot.img boot.img boot.asm asm boot.asm f bin o boot.img install run clean...

Makefile學習筆記

本文為學習筆記,僅供參考,如有好的建議歡迎指出!makefile規則 目標檔案 依賴檔案 tab 命令 命令前必須有乙個tab exp test main.c gcc main.c o test 隱式規則 o c 同名匹配 變數 類似於c中的巨集,引用方式 arg 變數名 值 引用變數可在之後定義 ...