理解Make的隐含规则

发布于 2024-09-24 02:55:28 字数 319 浏览 5 评论 0原文

如果我从此文件中删除 gcc 行,难道不应该将编译作为隐式规则吗?为什么它不允许我使用该 makefile 配置运行程序 ./calc

生成文件:

all: calc 

clean:  
    rm -rf calc arit.o calc.o

calc:   calc.o arit.o
    #gcc -o calc calc.o arit.o

calc.o: calc.c arit.h
    #gcc -c calc.c 

arit.o: arit.c arit.h
    #gcc -c arit.c

If I erase the gcc lines from this file shouldn't it take compilation as the implicit rule? Why isn't it allowing me to run the program ./calc with that makefile configuration?

Makefile:

all: calc 

clean:  
    rm -rf calc arit.o calc.o

calc:   calc.o arit.o
    #gcc -o calc calc.o arit.o

calc.o: calc.c arit.h
    #gcc -c calc.c 

arit.o: arit.c arit.h
    #gcc -c arit.c

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

老子叫无熙 2024-10-01 02:55:28

由于注释由制表位缩进,因此它被视为命令(并由 shell 执行,shell 将其视为注释)。

如果“#”符号位于第 1 列,那么它们将是纯(make)注释。

Because the comment is indented by a tab stop, it is treated as a command (and executed by the shell, which treats it as a comment).

If the '#' symbols were in column 1, then they would be pure (make) comments.

请远离我 2024-10-01 02:55:28

根据 Jonathan Leffler 的回答,以下最小的 GNUMakefile 应该仅通过隐式规则进行所有编译和链接:

calc: calc.o arit.o
arit.o: arit.c arit.h
calc.o: calc.c arit.h
clean:
    rm -rf calc arit.o calc.o

Further to Jonathan Leffler's answer, the following minimal GNUMakefile should do all compilation and linking through implicit rules only:

calc: calc.o arit.o
arit.o: arit.c arit.h
calc.o: calc.c arit.h
clean:
    rm -rf calc arit.o calc.o
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文