【问题标题】:Calling an external shell script inside a makefile for setting variables在 makefile 中调用外部 shell 脚本来设置变量
【发布时间】:2011-09-14 14:22:01
【问题描述】:

看看下面的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 以便可以设置这些变量。我怎样才能做到这一点?

【问题讨论】:

    标签: shell makefile


    【解决方案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 $@
    

    【讨论】:

      【解决方案2】:

      EXPORT 在当前 shell 中定义一个变量。变量在调用者中不可见。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 2017-09-24
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        相关资源
        最近更新 更多