为什么我的 Makefile 在没有更改的情况下会不断重新编译?

java程序

我有一个看起来像这样的makefile

all:    all_functions
all_functions:  a_functions.o b_functions.o c_functions.o d_functions.o main.o a.h b.h c.h d.h main.h 
      gcc -o program1 a_functions.o b_functions.o c_functions.o d_functions.o main.o
a_functions.o:  a_functions.c a.h
      gcc -c -o a_functions.o a_functions.c
b_functions.o:  b_functions.c b.h
      gcc -c -o b_functions.o b_functions.c
c_functions.o:  c_functions.c c.h
      gcc -c -o c_functions.o c_functions.c
d_functions.o:  d_functions.c d.h
      gcc -c -o d_functions.o d_functions.c
main.o: main.c main.h
      gcc -c -o main.o main.c
clean:
      rm *.o program1
install:
      cp ./program1 "/usr/local/program1"
uninstall:
      rm "/usr/local/program1"

我在 makefile 中使用了制表符而不是空格。当我这样做时make -f Makefile,makefile 每次都会编译并创建 program1,即使文件存在并且没有进行任何更改。我的makefile有什么问题?我希望看到一条错误消息“make:Nothing to be done for..”

斯蒂芬·基特

您正在使用假目标具有有用名称但其配方不产生目标的目标。也就是说,make最终尝试构建all_functions目标,但关联的配方不会构建任何名为all_functions.

如果将前两行替换为

all: program1
program1: a_functions.o b_functions.o c_functions.o d_functions.o main.o a.h b.h c.h d.h main.h

您应该会发现它的make行为与您期望的一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的 Makefile 在没有更改的情况下不断重新编译

为什么我的Makefile每次都会重新编译?

为什么修改了源文件和头文件,但是没有重新编译makefile

为什么我的变量没有在我的Makefile中扩展?

为什么我的 makefile 没有创建目标之一?

Makefile,为什么每次都要重新编译?

为什么Makefile会忽略我的.o文件规则?

为什么bitbake会忽略我的makefile中的CFLAGS?

为什么在没有正确的makefile的情况下cpanm在cpan -i成功的地方失败?

Linux中的Makefile:为什么我可以在未经许可的情况下覆盖文件?

为什么 make 重新编译这个 makefile 中的所有内容?

我可以避免在没有`static mut`的情况下重新编译平台层吗?

为什么我的Makefile无法编译,我该如何解决?

为什么我的GNU Make Makefile会两次构建我的库?

为什么我的带有模式规则的 Makefile 没有为 main 创建调试符号?

Makefile:为什么带有%的makefile不起作用?

为什么即使我在makefile中写了它,当我执行make时也没有-g选项(gdb)

为什么我的 WASAPI 侦听器即使在没有播放的情况下也会触发?

我的makefile有什么问题?

我的C的makefile有什么问题?

Makefile重新编译所有内容

为什么我的makefile中没有规则使另一个目标需要目标

为什么makefile没有调用此函数?

我的交叉编译makefile有什么问题?

为什么makefile在没有任何特定规则的情况下自动生成目标文件(* .o)?

为什么我的Makefile给我带来麻烦?

为什么我可以在没有编译器错误的情况下将错误的接口传递给函数?

为什么makefile坚持不应该编译的东西?

我可以在不重新编译源代码的情况下重建包吗?