簡體   English   中英

makefile:為什么這個簡單的makefile只處理第一個源文件?

[英]makefile: Why does this simple makefile only process the first source file?

[解決了]

我在使這個簡單的makefile正常工作方面遇到麻煩。

這應該將三個源文件NeonAs1.cpp NeonAs2.cpp NeonAs3.cpp構建為“ obj”文件夾中的目標文件。

這是可行的,但是它只會嘗試構建NeonAs1.cpp,然后完成而不會出錯。

有任何想法嗎?

WORKSPACE=../../workspace/
SRC_FOLDER=$(WORKSPACE)/ProjectNeon/
LOCAL_SRC_FILES=NeonAs1.cpp NeonAs2.cpp NeonAs3.cpp

vpath %.cpp $(SRC_FOLDER)

OBJECTS = $(patsubst %.cpp,obj/%.o,$(LOCAL_SRC_FILES)) 

$(OBJECTS): | obj

obj:
    @mkdir -p $@

obj/%.o : %.cpp
    @echo $< 
    @$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
    -rm -f $(LIBRARY) obj/*.o

更新1:如果我添加一個明確的所有目標,如:

all: $(OBJECTS)

然后,如果我做一個明確的:

make all 

它很好用..當我只做一個沒有“全部”目標的make時,如何使它起作用


更新2:解決了,我只需要將所有目標移到$(OBJECTS)目標上方。

make的默認行為是僅構建Makefile中列出的第一個目標。 我沒有在$(OBJECTS): | obj之前列出任何目標$(OBJECTS): | obj $(OBJECTS): | obj 因此,“第一目標規則”將構建$(OBJECTS)列出的第一件事。

要構建所有$(OBJECTS) ,您需要一個依賴於$(OBJECTS)最終可執行文件目標。

為了使Makefile符合通用約定,您將希望在Makefile的早期列出一個名為all的目標,該目標也取決於您的可執行文件。 這樣,當您鍵入makemake all ,它將構建$(OBJECTS)和可執行文件。

為了進行調試,您可以添加一個名為debugvars:的目標debugvars:該目標僅執行@echo OBJECTS=$(OBJECTS)以確保按預期設置了$(OBJECTS) 要運行該目標,然后可以鍵入make debugvars 我已經使用了很多次調試Makefile中的變量的便捷技巧。

暫無
暫無

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

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