【发布时间】:2012-01-30 13:25:20
【问题描述】:
我有一个通过环境变量收集版本信息的 gnu Makefile。现在,我想在使用 gnumake 语法构建任何目标之前全局做一些“事情”。作为伪代码,这意味着:
- 当指定文件存在时,删除它
- 遍历字符串数组并将其值放入指定文件中
我试过了:
$(shell if exist $(subst /,\,$(products)filenames.h) del /F/Q $(subst /,\,$(products)filenames.h))
$(foreach Item, $(EnvFilenames), @echo $(Item) >> $(subst /,\,$(products)filenames.h))
这给了我一个错误:
C:\temp\Makefile.mak:72: *** missing separator. Stop.
其中第 72 行是 $(shell ... 行。如果我把它放在define 部分:
define foobar
$(shell if exist $(subst /,\,$(products)filenames.h) del /F/Q $(subst /,\,$(products)filenames.h))
$(foreach Item, $(EnvFilenames), @echo $(Item) >> $(subst /,\,$(products)filenames.h))
endef
并为一个目标调用它,它运行良好:
$(products)$test.o : test.c $(commons)
$(call foobar)
$(cc) $(cflags_m) test.c -o$@
并做它应该做的......但只要我想从另一个 define 内部调用它,它就会再次失败,缺少分隔符。
这是什么意思,我该如何解决?
编译在 Win32 平台上进行,不必是多平台的。
【问题讨论】:
标签: gnu-make