理解简单的makefile

理解简单的makefile
.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可能会变得相当混乱。

相关内容