![理解简单的makefile](https://linux22.com/image/208239/%E7%90%86%E8%A7%A3%E7%AE%80%E5%8D%95%E7%9A%84makefile.png)
.PHONY:hello
hello:c_mem.c
cc c_mem.c -o c_mem
make 命令将生成文件 c_mem.
.PHONY:hello
hello:c_mem.c
cc c_mem.c
make命令将生成文件a.out。
所有这些对我来说似乎都很有意义。但是从手册来看:https://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html
目标通常是由程序生成的文件的名称;目标的示例是可执行文件或目标文件。目标也可以是要执行的操作的名称,例如“干净”(请参阅虚假目标)。
先决条件是一个用作创建目标的输入的文件。一个目标通常取决于多个文件。
假:https://stackoverflow.com/questions/2145590/what-is-the- Purpose-of-phony-in-a-makefile 所以我不确定
.PHONY:hello
hello:c_mem.c
cc c_mem.c -o c_mem
这:你好和你好:意思是?
我可以将 makefile 解释为
整个项目名称别名为你好,在 hello 文件 c_mem.c 中执行以下命令
cc c_mem.c -o c_mem
答案1
Makefile 解释如下:
target: <dependencies>
commands to produce target
- 冒号
:
始终属于目标。 - 构建目标时将检查所有依赖项(文件日期),因此所有需要的依赖项将自动更新如果需要的话。
- 重新构建依赖项后(比目标更新),执行列出的命令
正如您提供的链接下的文章所述:
PHONY targets are not associated with (output) files
因此,您始终能够在需要时构建目标,而与文件日期无关(例如make clean
:):
.PHONY: clean
clean:
rm -rf build/*
我建议使用CMake
,它是 的生成器Makefiles
,但在语法上更容易理解。Makefiles
可能会变得相当混乱。