[英]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
的目標,該目標也取決於您的可執行文件。 這樣,當您鍵入make
或make all
,它將構建$(OBJECTS)
和可執行文件。
為了進行調試,您可以添加一個名為debugvars:
的目標debugvars:
該目標僅執行@echo OBJECTS=$(OBJECTS)
以確保按預期設置了$(OBJECTS)
。 要運行該目標,然后可以鍵入make debugvars
。 我已經使用了很多次調試Makefile中的變量的便捷技巧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.