本地我在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在我尝试实施时会给我带来错误
答案 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变量。了解差异至关重要。