修改源文件,make不重新编译。

新手上路,请多包涵

我有以下几个文件

[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)
这两者背后是什么原理啊

阅读 7.5k
1 个回答
新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进