作者:开拓者企业管理培训 | 来源:互联网 | 2023-09-10 17:20
我有以下几个文件
1 2
| [root@CentOS6u5_x64 05:32:51 cannotcomplier]# ls
add.c add.h main.c makefile |
makefile 中是这样写的:
1 2 3 4 5 6 7 8 9 10
| main:main.o add.o
gcc -o main main.o add.o
main.o:main.c
gcc -o main.o -c main.c
add.o:$(@:%.o=%.c) $(@:%.o=%.h)
gcc -o add.o -c add.c
.PHONY:clean
clean:
rm *.o -rf
rm main -rf |
我每次重新执行以下touch main.c 或者修改main.c的内容之后,
执行make都可以重新编译。
但是当我makefile这样写的话
1 2 3 4 5 6 7 8 9 10 11
| main:main.o add.o
gcc -o main main.o add.o
main.o:$(@:%.o=%.c)
$(warning $(@:%.o=%.c))
gcc -o main.o -c main.c
add.o:$(@:%.o=%.c) $(@:%.o=%.h)
gcc -o add.o -c add.c
.PHONY:clean
clean:
rm *.o -rf
rm main -rf |
再次修改main.c或者touch main.c,就不能重新编译,求大神是什么问题啊?
main.o:main.c 和 main.o:$(@:%.o=%.c)
这两者背后是什么原理啊