每当我在Makefile中尝试构建类似的东西时 -
gcc -o main.o -IStarterWare_Files -c main.c StarterWare_Files/test.h StarterWare_Files/add.h
它引发了我的错误,gcc:无法使用多个文件指定-o和-c或-S . 基本上我想让我的makefile再次构建目标,如果我改变我的一个头文件中的一些宏 . 我目前的Makefile是 -
EXE = nextgenrsm
CC = gcc
LIBS = StarterWare_Files/
CPPFLAGS = _IStarterWare_Files/
MAIN_OBS = $(patsubst %.c,%.o,$(wildcard *.c))
LIB_OBS = $(patsubst %.c,%.o,$(wildcard StarterWare_Files/*.c))
all: $(EXE)
$(EXE): $(MAIN_OBS) $(LIB_OBS)
$(CC) -o $@ $(LDFLAGS) $(MAIN_OBS) $(LIB_OBS) $(LDLIBS)
%.o: %.c
$(CC) -o $@ -MD -MP $(CPPFLAGS) $(CFLAGS) -c $^
ALL_DEPS = $(patsubst %.o,%.d,$(MAIN_OBS), $(LIB_OBS))
-include $(ALL_DEPS)
clean:
rm -f $(LIB_OBS) $(EXE) $(MAIN_OBS) $(ALL_DEPS)
.PHONY: all clean
如果其中一个头文件被修改,我无法弄清楚要再次构建我的可执行文件会做出哪些更改 . 我不想做干净再做 .
1 回答
automake系统处理此问题的方法是不使用
%.o: %.c
,而是列出C文件和C文件中的所有标头 .例如:
有关将读取C文件并找出make依赖项的工具,请参阅makedepends .