簡體   English   中英

Makefile混亂

[英]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.

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