在makefile中调用外部shell脚本来设置变量

时间:2011-09-14 06:17:03

标签: shell makefile

看一下下面的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_USERDB_PASS在单独的外部文件conf.sh中定义,如下所示:

export DB_USER=<username>
export DB_PASS=<password>

然后在SUBDIRS内的makefile中需要这些。

如果我在命令行上运行. conf.sh,然后调用make,则会为USERPASS分配正确的值,并且编译完成得很好。但我希望在makefile中调用conf.sh,以便可以设置这些变量。我怎么能做到这一点?

2 个答案:

答案 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中定义一个变量。变量在调用者中不可见。