[英]Makefile Confusion
我是makefile的新手,但最終我設法為正在從事的項目工作了一個文件。 最初的目標是在文件夾“ Source”中搜索所有CPP文件,然后在Products / Objs文件夾中創建一個Object文件。 相反,它找到了CPP文件,但是OBJECT_FILES與SOURCE_FILES相同,我不確定它是如何工作的。 它不會生成任何.o文件(我可以看到),但是仍然可以成功編譯。 超級困惑,但希望得到一些幫助。 謝謝!
##########################################
# Editable options #
##########################################
# Program Name
EXECUTABLE=net
# Compiler options
CC=g++
CFLAGS=
LDFLAGS=
# Folders
SRC=Source
OBJ=Products/Objs
#########################################################
# Do Not Touch This #
#########################################################
SOURCE_FILES := $(shell find $(SRC)/ -type f -name '*.cpp')
## This should not work
OBJECT_FILES := $(SOURCE_FILES: $(SRC)/%.cpp=%.o)
## Like at all --> It's the same as SOURCE_FILES
## But I guess???
build: $(EXECUTABLE)
## Deletes the executable (assumes small compile time)
clean:
@rm -r -f $(shell find $(SRC)/ -type f -name '*.o')
@rm $(EXECUTABLE)
.PHONY: build clean
$(EXECUTABLE): $(OBJECT_FILES)
@$(CC) $(LDFLAGS) -o $@ $^
@echo "Build successful!"
$(OBJECTS_FILES): %.o : $(SRC)/%.cpp
@$(CC) $(CFLAGS) -o -c $@ $^
好吧,首先您有錯字; 您創建一個變量OBJECT_FILES
:
OBJECT_FILES := $(SOURCE_FILES: $(SRC)/%.cpp=%.o)
另外,您不應該在這里使用空格(在:
)。 然后,您使用名為OBJECTS_FILES
的變量代替:
$(OBJECTS_FILES): %.o : $(SRC)/%.cpp
該變量為空,因此本質上是空操作。
您的編譯器調用是錯誤的。 -o
選項后的單詞是輸出應轉到的文件; 你的是:
@$(CC) $(CFLAGS) -o -c $@ $^
這意味着該命令的輸出將進入文件-c
。 然后輸入是一個不存在的目標文件...很可能會出現錯誤。 另外,您只想將源文件傳遞給編譯器,而不是所有其他先決條件(標頭等),這應該是:
@$(CC) $(CFLAGS) -c -o $@ $<
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.