假设我们有以下设置:
#include <stdio.h>
#include "prog.h"
int main(){
printf("%s\n", HELLO);
return 0;
}
#ifndef _PROG_H
#define _PROG_H
#define HELLO "hello world"
#endif
(注意我简化了Makefile以使问题更加明显)
MYCC = gcc
CC = $(MYCC) -MMD -MP -c
LINK = $(MYCC) -o
TARGETS = prog
all: $(TARGETS)
clean:
rm -f *.o *.d $(TARGETS)
prog: prog.o
$(LINK) $@ $^
%.o: %.c
$(CC) $<
-include $(SRC:%.c=%.d)
这个makefile假设在首次运行后自动创建依赖项(* .d文件)。
但是出了点问题,因为如果我更改.h文件,它根本不会重建项目。
[nmmm@zenbook ctest]$ make
gcc -MMD -MP -c prog.c
gcc -o prog prog.o
[nmmm@zenbook ctest]$ ./prog
hello world
[nmmm@zenbook ctest]$ touch prog.c
[nmmm@zenbook ctest]$ make
gcc -MMD -MP -c prog.c
gcc -o prog prog.o
[nmmm@zenbook ctest]$ touch prog.h
[nmmm@zenbook ctest]$ make << here is the problem
make: Nothing to be done for 'all'.
prog.d
看起来不错。
我做错了什么?
答案 0 :(得分:6)
你永远不会在任何地方真正定义SRC
。如果您明确设置它:
SRC = prog.c
或使用通配符:
SRC = $(wildcard *.c)
然后一切都适合我。