簡體   English   中英

Makefile中的依賴項

[英]Dependencies in makefile

我有一個makefile,一個片段看起來像這樣(為清楚起見,文件和目標已重命名):

target1 : OtherLib.o MyProg.h MyProg.cpp
    g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o

當我運行'make target1'時,我想進行檢查以確保MyProg.h和MyProg.cpp是最新的,如果沒有,請運行target1。 但是,我得到了錯誤

make: *** No rule to make target `MyProg.cpp', needed by `target1'. Stop.

但是“ MyProg.cpp”是我要編譯的東西! 因此,我為此設定了一個空目標:

MyProg.h :
MyProg.cpp :
target1 : OtherLib.o MyProg.h MyProg.cpp
    g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o

這可行,但是看起來很奇怪。 我的印象是,如果我簡單地這樣做:

target1 : OtherLib.o
    g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o

則無論MyProg是否是最新的,都將對其進行編譯,因為MyProg.cpp未作為依賴項列出。 什么是正確的方法,以便僅當MyProg.cpp和MyProg.h不是最新版本時,make才能編譯MyProg.o?

似乎不應該發生。 也許您應該仔細檢查拼寫錯誤。 如果您的操作系統對您隱藏了文件擴展名,我尤其會對此感到懷疑。

我無法重現您的問題。 您可以嘗試使用-d選項運行make,以獲取有關make試圖執行的操作的非常詳細的歷史記錄。 我最好的猜測是由於某種原因它在錯誤的目錄中查找。

我認為由於沒有生成名為target1可執行文件,因此目標target1實際上將是一個偽目標,並且始終會執行相應的命令。 因此,無論如何都將編譯您的代碼。
盡管我也無法重現您的問題:沒有規則可以將目標設置為“ MyProg.cpp”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM