1. 程式人生 > >makefile中的目標的依賴該怎麼寫?

makefile中的目標的依賴該怎麼寫?

注意,這篇博文

並不是makefile的教程!

並不是makefile的教程!

並不是makefile的教程!

僅僅是在學習makefile過程中關於如何寫依賴的一個感悟。

makefile的學習文件可參考:

http://download.csdn.net/detail/gmpy_tiger/9568503

簡要說下makefile的一個基本格式:

目標:依賴檔案(目標)

【tab】命令

“目標” :是你要生成的或操作的命令的索引

“依賴” :是生成目標依賴的檔案或目標【依賴檔案的任一處改動,將導致已存在的目標檔案過期】

“命令” :是為了生成目標的給shell執行的命令

需要注意的是,依賴的作用:

【依賴檔案的任一處改動,將導致已存在的目標檔案過期】

【依賴檔案的任一處改動,將導致已存在的目標檔案過期】

【依賴檔案的任一處改動,將導致已存在的目標檔案過期】

簡單來說:

依賴的作用就是決定目標是否過期,是否需要重新編譯。

舉個例子:

#include <stdio.h>
#include "mylib1.h"
#include "mylib2.h"

int main(int argc, char argv[]){
    printf("hello world!\n");
}
我的makefile可以寫成

helloworld : stdio.h mylib1.h mylib2.h other.o

    gcc -o helloworld helloworld.c

也可以寫成

helloworld : other.o

    gcc -o helloworld helloworld.c

前者希望在stdio.h mylib1.h,mylib2.h,other.o 改變的時候重新編譯helloworld.c,後者希望僅僅在other.o改變的時候重新編譯helloworld.c。

因此,

你想helloworold在什麼改變的時候重新編譯,就把什麼寫在依賴裡。這就是依賴,並不死板的規定所有標頭檔案必須寫在依賴裡。(不過一般而言,為了目標能正常執行,都希望自己寫得標頭檔案發生了改變,重新編譯目標)

========================================================================================

依賴的另外一個常做用途是:執行指定的目標

例如:

.PHONY: all

all : helloworld clean

helloworld:helloworld.o

    gcc helloworld.o -o helloworld

helloworld.o:

    gcc -c helloworld.c

clean:

    rm helloworld.o

all作為終極目標(即makefile的最上面的第一個目標),依賴helloworld和clean,因此,執行生成all目標前(實際上由於all目標沒有命令,因此在處理完依賴後直接退出,並沒有all生成),會先執行helloworld和clean目標。

相關推薦

makefile目標依賴怎麼

注意,這篇博文 並不是makefile的教程! 並不是makefile的教程! 並不是makefile的教程! 僅僅是在學習makefile過程中關於如何寫依賴的一個感悟。 makefile的學習文件可參考: http://download.csdn.net/detail/

軟件工程文檔設計的基本要求:關於每個文檔究竟什麽

來源 知識 深入 有時 規範 讀取數據 輸出 不能 我們 首先看軟件需求分析 需求分析階段的任務分為四個階段:需求獲取,需求分析,需求定義,需求驗證 需求獲取這部分比較模糊,應該也是比較雜,比較靈活的一部分,先來個大概的功能敘述,然後將需求一項一項地列出來。 需求分析這部分

oracle數據庫安裝過程的疑惑—記錄是本人以前在微博上的文章

itl 解壓 遠程 新的 api RF 格式 遠程連接 兩個 轉行IT初學者關於oracle數據庫整理第一次安裝數據庫的時候都是按照操作步驟一步一步進行安裝,並沒有對操作步驟產生過懷疑或者為什麽要這麽進行操作?2017年12月8日再次閱讀安裝操作說明書的時候有了新的理解,所

無法安裝程式包“Newtonsoft.Json 6.0.4”。你正在嘗試將此程式包安裝到目標為“.NETFramework,Version=v4.7”的專案,但程式包不包含任何與框架相容的程式集

今天在ConsoleApp裡面安裝SignalR.SelfHost,但是預設的SelfHost安裝的JSON檔案是6.0.4不相容.NET框架,只要手動安裝上JSON,再安裝SignalR.SelfHost的時候,就不會安裝預設的JSON了,也就不會出錯了。 Install-Packa

Java 一段字元到指定的文字文件,如果文字文件不存在,則建立文字文件

寫一段字元到指定的文字文件中,如果該文字文件不存在,則建立該文字文件 1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.io.FileOutputStream; 4 import java.

python3reload(sys)怎麼

在Python2.x中由於str和byte之間沒有明顯區別,經常要依賴於defaultencoding來做轉換。   #python2寫法: import sys  reload(sys)  sys.setdefaultencoding(‘utf-8’)&

Makefile的偽目標和變數定義格式

本節我們討論一個Makefile中的一個重要的特殊目標:偽目標。 偽目標是這樣一個目標:它不代表一個真正的檔名,在執行make時可以指定這個目標來執行其所在規則定義的命令,有時我們也可以將一個偽目標稱為標籤。使用偽目標有兩點原因:1. 避免在我們的Makefile中定義的

makefileshell注意點

1、在Makefile中只能在target中呼叫Shell指令碼,其他地方是不能輸出的。比如如下程式碼就是沒有任何輸出: VAR="Hello" echo "$VAR" all: ..... 以上程式碼任何時候都不會輸出,沒有在target內,如果上述程式碼改為如下: VAR="Hello" al

makefile的為目標如何理解

使用makefile編譯C或者C++專案,經常會有 make all ,make clean,make install等命令,後面的all,clean install 都成為偽目標。 那麼相對於偽目標

關於makefile自動產生依賴的理解

本博文是在學習了《GNU Make中文手冊》後記錄下來的自己的關於自動產生makefile依賴的語句的理解,向大家分享。 《GNU make中文手冊》中的相關章節見一下連結: http://blog.csdn.net/gmpy_tiger/article/details/5

跟我一起Makefile(13)--- make的執行(make的退出碼+指定Makefile+制定目標+檢查規則+make的引數)

make 的執行 —————— 一般來說,最簡單的就是直接在命令列下輸入make命令,make命令會找當前目錄的makefile來執行,一切都是自動的。但也有時你也許只想讓make重編譯某些檔案,而不是整個工程,而又有的時候你有幾套編譯規則,你想在不同的時候使用不同的編

makefile命令在兩行和在一行的區別

       來看mafile: main: main.o g++ -o main main.o main.o: main.cpp g++ -o main.o -c main.cpp cle

.PHONY makefile的偽目標

我的理解:   拿clean舉例,如果make完成後,自己另外定義一個名叫clean的檔案,再執行make clean時,將不會執行rm命令。    為了避免出現這個問題,需要.PHONY: clean ===================================================

Makefile使用 for 控制結構編譯多個目標檔案

假如,有很多檔案,每個檔案都要變成一個單獨的目標檔案,如果使用makefile的話,最好能用一個 for 迴圈來做。 makefile是支援使用 for的。 先假定有下面幾個檔案: a.h b.h test1.cpp test2.cpp $ cat a.h #if

Makefile 8——使用依賴關系文件

cat ddp 地理 但是 代碼 終極 源文件 無限循環 prefix Makefile中存在一個include指令,它的作用如同C語言中的#include預處理指令。在Makefile中,可以通過include指令將自動生成的依賴關系文件包含進來,從而使得依賴關系文件中的

makefile的一點知識

color 一點 pan col get ack 是什麽 makefile track makefile文件裏以下這一部分展開是什麽樣的呢?。。。mytarget=foo $(mytarget): $(mytarget).c gcc -o $(mytarge

Makefile目標

而是 一次 我們 避免 並行 重名 理解 目標 完整   本節我們討論一個Makefile中的一個重要的特殊目標:偽目標。 偽目標是這樣一個目標:它不代表一個真正的文件名,在執行make時可以指定這個目標來執行其所在規則定義的命令,有時我們也可以將一個偽目標稱為標簽。使用

SignalR依賴註入

rar try mic lang net vol 需要 ioc scom 什麽是依賴註入? 如果你已經熟悉依賴註入可以跳過此節。 依賴註入 (DI) 模式下,對象並不為自身的依賴負責。 下邊的例子是一個主動 DI. 假設你有個對象需要消息日誌。你可能定義了一個日誌接口:

Makefile怎樣調用python和perl文件為自己提供須要的數據

print erl col shel ria 實例代碼 space shell eight Makefile中怎樣調用python和perl文件為自己提供須要的數據,利用print函數對外輸出數據 實例代碼例如以下 perl.pl #!/usr/bin/per

在.net序列化讀xml方法的總結

port 單詞 創建 padding 在一起 sys base msd 屏幕 在.net中序列化讀寫xml方法的總結 閱讀目錄 開始 最簡單的使用XML的方法 類型定義與XML結構的映射 使用 XmlElement 使用 XmlAttribute 使用 Inner