看一下下面的makefile(不能正常工作)...
export CC = gcc
export CFLAGS = -W -Wall -fPIC -m32
USER = $(DB_USER)
export USER
PASS = $(DB_PASS)
export PASS
SUBDIRS = libs dbserver
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
$(MAKE) -C $@
变量DB_USER
和DB_PASS
在单独的外部文件conf.sh
中定义,如下所示:
export DB_USER=<username>
export DB_PASS=<password>
然后在SUBDIRS
内的makefile中需要这些。
如果我在命令行上运行. conf.sh
,然后调用make,则会为USER
和PASS
分配正确的值,并且编译完成得很好。但我希望在makefile中调用conf.sh
,以便可以设置这些变量。我怎么能做到这一点?
答案 0 :(得分:1)
您可以使用:
$(SUBDIRS):
. conf.sh; $(MAKE) -C $@ DB_USER="$${DB_USER}" DB_PASS="$${DB_PASS}"
这将在命令行上公开密码,但是完成了工作。请注意双美元;该部分由shell评估,而不是由make
评估(因此大括号也是必需的)。我不确定我推荐它,但它应该有用。
考虑一下,你可以避免显式传递参数,因为conf.sh
脚本会导出它们。无论如何,$DB_USER
和$DB_PASS
的值都可供下属make
使用:
$(SUBDIRS):
. conf.sh; $(MAKE) -C $@
答案 1 :(得分:0)
EXPORT
在当前shell中定义一个变量。变量在调用者中不可见。