【问题标题】:what wrong the $(wildcard )?$(通配符)有什么问题?
【发布时间】:2015-09-17 11:34:27
【问题描述】:

我在一个空目录中写了一个makefile,如下所示:

file_src=$(wildcard *.c)
display_file:
    @touch o.c&&echo $(file_src)

然后我运行 make,但没有打印任何内容。为什么没有打印“o.c”?

【问题讨论】:

  • 你可以用ls *.c代替echo $(file_src),但也许你对这个变量有更大的计划。

标签: makefile wildcard


【解决方案1】:

因为你的操作顺序错误。

您希望 make 扩展 $(file_src)(因此是 $(wildcard) 调用)它运行 touch 之后,但事实并非如此。

Make 扩展 $(file_src)(和 $(wildcard) 调用)执行任何配方内容之前。

你可以在这里看到这个:

$ cat Makefile
$(info echo Manual shell check)$(shell ls *.created)

file_src=$(shell touch make.created)

all:
        echo First recipe line; ls *.created
        echo $(file_src)
        touch recipe.created
        echo Final recipe line; ls *.created
$ ls
Makefile
$ make
echo Manual shell check
ls: *.created: No such file or directory
echo First recipe line; ls *.created
First recipe line
make.created
echo

touch recipe.created
echo Final recipe line; ls *.created
Final recipe line
make.created  recipe.created

【讨论】:

  • 非常感谢。是否在生成任何目标之前扩展所有功能?
  • 我看到 .$(file_src) 是一个 make 文件变量($(wildcard) 是一个 makefile 函数),所以当 $(file_src) 出现在将要执行的配方中时,$(file_src) (表示变量和函数)必须先展开,然后在shell中执行。对吗?
  • How make Reads a Makefile 是手册中关于如何/何时变量/等方面的有用部分。被扩展。就配方而言,尽管 整个 配方是可变的/等等。 任何配方执行之前展开。
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多