这些是我的文件:add.c add.h main.c makefile
这是makefile:
main:main.o add.o
gcc -o main main.o add.o
main.o:$(@:%.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并制作之后。但是make告诉我:make:`main'是最新的。
如果我更改我的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
然后,在我更改main.c并制作之后。它可以工作。
我不知道原因。
的依赖
main.o:$(@:%.o=%.c)
add.o:$(@:%.o=%.c) $(@:%.o=%.h)
无效的make语法。
将这两个规则替换为一个模式(通用)规则:
%.o : %.c
gcc -c -o $@ ${CPPFLAGS} ${CFLAGS} $<
上面的规则实际上与用于编译来自以下文件的内置规则非常相似:.o
.c
编译C程序
n.o
由n.c
表格的配方自动制成$(CC) $(CPPFLAGS) $(CFLAGS) -c
。
换句话说,您可以删除和的原始规则main.o
,add.o
并且该规则应正确构建。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句