假设我们有以下设置:
#include <stdio.h>
#include "prog.h"
int main(){
printf("%s\n", HELLO);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#ifndef _PROG_H
#define _PROG_H
#define HELLO "hello world"
#endif
Run Code Online (Sandbox Code Playgroud)
(注意我简化了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)
Run Code Online (Sandbox Code Playgroud)
这个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'.
Run Code Online (Sandbox Code Playgroud)
prog.d 看起来不错.
我做错了什么?
你永远不会在SRC任何地方定义 如果您明确设置它:
SRC = prog.c
Run Code Online (Sandbox Code Playgroud)
或使用通配符:
SRC = $(wildcard *.c)
Run Code Online (Sandbox Code Playgroud)
一切都适合我.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |