首页 > 解决方案 > Makefile FILES 命令不会执行

问题描述

我正在尝试学习 Make 语法,我已指示它编译文件并且它正确地执行此操作,当我告诉它执行 shell 命令以使用 touch 创建文件时它不会这样做,它不会返回任何错误以指示任何内容是错的。

命令

HelloWorld: HelloWorld.c
    gcc -o HelloWorld HelloWorld.c 

FILES="$(shell touch > file1.txt)"

标签: makefile

解决方案


正如已经指出的那样,您的语法是错误的。但除此之外,您的 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部分。


推荐阅读