有没有更好的方法来源脚本,它设置env vars,从一个makefile?
FLAG ?= 0 ifeq ($(FLAG),0) export FLAG=1 /bin/myshell -c '<source scripts here> ; $(MAKE) $@' else ...targets... endif
回答问题的问题:你不能。
基本问题是子进程不能改变父进程的环境。 shell通过在source’ing时不分叉一个新进程,而是在shell的当前化身中运行这些命令。这工作正常,但make不是/ bin / sh(或你的脚本的任何shell),不理解这种语言(除了他们有共同点)。
Chris Dodd和Foo Bah已经解决了一个可能的解决方法,所以我建议另一个(假设你正在运行GNU make):后处理shell脚本到make兼容文本,并包括结果:
shell-variable-setter.make: shell-varaible-setter.sh postprocess.py @^ # ... else include shell-variable-setter.make endif
杂乱的细节留下作为一个练习。