我是makefiles的新手,但我终于设法让一个人为我正在进行的项目工作。最初的目标是搜索文件夹" 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 $@ $^
答案 0 :(得分:0)
首先你有一个错字;您创建变量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 $@ $<