From 8bfbf1463a28c18faf55da63faae3c0550cf8ecc Mon Sep 17 00:00:00 2001 From: Integral Date: Mon, 23 Sep 2024 01:17:05 +0800 Subject: [PATCH] Ch07: fix main.c & add more simplified Makefile as a tip --- docs/Ch07/index.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/Ch07/index.md b/docs/Ch07/index.md index 92c2b3e1..28ef117c 100644 --- a/docs/Ch07/index.md +++ b/docs/Ch07/index.md @@ -127,6 +127,8 @@ Hello World! ```c // main.c +#include "print.h" + int main() { print(); return 0; @@ -247,6 +249,24 @@ Makefile 的亮点在于引入了文件间的依赖关系。 在项目较大时这能明显节省构建所需的时间,同时也能解决一些由于编译链接顺序造成的问题。 相较与输入一大串指令,单个的 `make [target]` 甚至是仅仅 `make`,也更加优雅和方便。 +!!! tip "小知识" + + 在 Makefile 中有一些隐含规则。即使我们的 Makefile 中没有显式书写这样的规则,make 也会按照这些隐含规则来运行。 + 例如,上文提到的自动将 `.c` 文件编译成 `.o` 就是一种隐含规则。 + + 除此之外,Makefile 中还有如下隐含规则: + + - `filename.o` 的依赖会自动推导为 `filename.c` + - `filename` 的依赖会自动推导为 `filename.o` + + 利用这两条隐含规则,我们的 Makefile 还可进一步化简成: + + ```make + main.o: print.h + print.o: print.h + main: print.o + ``` + #### 其他的构建工具:CMake,ninja…… {#c-build-tools-other} 一个更大的工程可能有上万、上十万份源文件,如果一一写进 Makefile,那依然会异常痛苦,且几乎不可能维护。