Makefile混乱

时间:2017-03-08 15:30:47

标签: c++ shell makefile

我是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 $@ $^

1 个答案:

答案 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 $@ $<