我有一个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))
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
C:\temp\Makefile.mak:72: *** missing separator. Stop.
Run Code Online (Sandbox Code Playgroud)
其中第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
Run Code Online (Sandbox Code Playgroud)
并将其称为目标,运行正常:
$(products)$test.o : test.c $(commons)
$(call foobar)
$(cc) $(cflags_m) test.c -o$@
Run Code Online (Sandbox Code Playgroud)
它应该做什么......但是一旦我想从另一个内部调用它define,它就会再次失败,并且会丢失一个分离器.
它是什么意思,我该如何解决?
编译在Win32平台上进行,不必是多平台的.
gnu-make ×1