如何将shell命令的结果存储在makefile中?

时间:2013-10-08 01:48:36

标签: shell makefile

本地我在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的文件。

我坚持让名字变成变量,解决方案I've found so far在我尝试实施时会给我带来错误

1 个答案:

答案 0 :(得分:3)

这一行

echo $MYNAMES; \

将替换make变量M的值,就好像你写了$(M)YNAMES一样。你想要

echo $$MYNAMES; \

代替。

这一行

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

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

确保您确实希望将它们存储在shell变量中,而不是存储为make变量。了解差异至关重要。