我正在尝试创建一个生成文件,该文件可以通过 .o 文件自动编译并将我的 .cpp 文件链接到可执行文件中。我无法工作的是自动(甚至手动)依赖生成。当我取消注释下面的注释代码时,运行时不会重新编译任何内容make build
。我得到的只是make: Nothing to be done for 'build'.
,即使 xh(或任何 .h 文件)已更改。我一直在尝试从这个问题中学习:Makefile, header dependencies , dmckee's answer, 特别是。为什么这个makefile不起作用?
澄清:我可以编译所有东西,但是当我修改任何头文件时,依赖它的 .cpp 文件不会更新。因此,如果我例如编译我的整个源代码,那么我#define
在头文件中更改 a ,然后运行make build
,然后我得到Nothing to be done for 'build'.
(当我取消注释以下代码的任一注释块时)。
CC=gcc
CFLAGS=-O2 -Wall
LDFLAGS=-lSDL -lstdc++
SOURCES=$(wildcard *.cpp)
OBJECTS=$(patsubst %.cpp, obj/%.o,$(SOURCES))
TARGET=bin/test.bin
# Nothing happens when i uncomment the following. (automated attempt)
#depend: .depend
#
#.depend: $(SOURCES)
# rm -f ./.depend
# $(CC) $(CFLAGS) -MM $^ >> ./.depend;
#
#include .depend
# And nothing happens when i uncomment the following. x.cpp and x.h are files in my project. (manual attempt)
#x.o: x.cpp x.h
clean:
rm -f $(TARGET)
rm -f $(OBJECTS)
run: build
./$(TARGET)
build: $(TARGET)
$(TARGET): $(OBJECTS)
@mkdir -p $(@D)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
obj/%.o: %.cpp
@mkdir -p $(@D)
$(CC) -c $(CFLAGS) $< -o $@