我有以下几个文件
[root@CentOS6u5_x64 05:32:51 cannotcomplier]# ls
add.c add.h main.c makefile
makefile 中是这样写的:
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这样写的话
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)
这两者背后是什么原理啊
答案请移步https://www.zhihu.com/questio...