0

在本地,我在 MacOS 上使用 GNU Make 3.8 (i386-apple-darwin11.3.0)

我正在尝试根据目录中的文件生成一堆测试文件。

现在我可以获取文件的基本名称,但我不知道如何将它们存储在一个变量中,以便我可以生成另一个具有基本名称的文件

TEST_FILES = lib/*.js

build-test:
    @mkdir -p tests
    -@for file in $(TEST_FILES); do \
        echo $$file; \
        MYNAMES = $(basename $$file .js) \
        echo $MYNAMES; \
    done

然后,我想使用 STDOUT 流的输出创建一堆名为 $MYNAME.log 的文件。

我一直坚持将名称放入变量中,到目前为止我发现 的解决方案在我尝试实现它们时会为我抛出错误

4

1 回答 1

3

这条线在这里

echo $MYNAMES; \

将替换为 make 变量的值M,就好像你写了 $(M)YNAMES. 你要

echo $$MYNAMES; \

反而。

这条线

   MYNAMES = $(basename $$file .js) \

不能工作 - 您正在使用一个 make 命令basename,该命令在调用 subshel​​l 以执行规则之前只执行一次,而file它是一个 shell 变量,它会更改循环的每次迭代。您可能的意思是$$(basename $$file),它将作为“$(basename $file)”传递给shell。shell 将插入运行basename命令的结果。

确保您确实希望将它们存储在 shell 变量中,而不是作为 make 变量。了解其中的区别很重要。

于 2013-10-08T02:49:27.990 回答