makefile - Makefile FILES 命令不会执行
问题描述
我正在尝试学习 Make 语法,我已指示它编译文件并且它正确地执行此操作,当我告诉它执行 shell 命令以使用 touch 创建文件时它不会这样做,它不会返回任何错误以指示任何内容是错的。
命令
HelloWorld: HelloWorld.c
gcc -o HelloWorld HelloWorld.c
FILES="$(shell touch > file1.txt)"
解决方案
正如已经指出的那样,您的语法是错误的。但除此之外,您的 shell 函数甚至永远不会被执行。
为什么不?因为在您的 makefile 中,您定义了一个包含 shell 变量调用的变量,但是您永远不会在任何地方使用该变量。由于您不使用它,因此该变量永远不会扩展。由于变量从不展开,因此其中的函数永远不会被调用。
如果要扩展变量,则需要将其设为简单变量(使用:=
),以便在分配变量时扩展右侧,或者必须在立即扩展的上下文中使用该函数;另一个答案有一个使用它的例子(在任何变量赋值之外)
这是使用简单变量的示例:
HelloWorld: HelloWorld.c
gcc -o HelloWorld HelloWorld.c
FILES := $(shell touch file1.txt)
(请注意,与 shell 变量不同,设置 makefile 变量时不需要引号)。
至于手册,它是作为用户指南编写的:也就是说,您应该从头开始阅读它,而不是您跳来跳去的参考手册。特别是在您仔细阅读并完全理解最初的两章“Makefiles 简介”和“Writing Makefiles”之前,您将无法编写 makefiles。为了流畅起见,您需要了解How make Reads a Makefile部分。