我在 Makefile 中有以下场景。
METIS_A2_PHP5_FPM = metis-a2-php5-fpm-11 # metis-a2-php5-fpm-12
all: ganymede metis-a2
box-build:
@echo ${@} :: $(HOSTNAME) :: $(HOSTIP)
@echo bash bin/vagrant.sh init $(HOSTNAME) $(HOSTIP)
ganymede:
@make ganymede-build
ganymede-build: HOSTNAME = "ganymede"
ganymede-build: HOSTIP = "10.0.3.2"
ganymede-build: box-build nis-server.sh syslog-ng-server.sh
metis-a2: metis-a2-php5-fpm # metis-a2-php5
metis-a2-php5-fpm:
@make metis-a2-php5-fpm-build
metis-a2-php5-fpm-build: $(METIS_A2_PHP5_FPM)
$(METIS_A2_PHP5_FPM):
@make ${@}-build
metis-a2-php5-fpm-11-build: HOSTNAME = "$(subst -build-host,,${@})"
metis-a2-php5-fpm-11-build: HOSTIP = "10.0.3.$(subst metis-a2-php5-fpm-,,$(HOSTNAME))"
metis-a2-php5-fpm-11-build: box-build apache2-php5-fpm.sh
在运行 make ganymede 时一切顺利,我得到以下结果:
# make ganymede
make[1]: Entering directory `/home/dragosc/Workspace/a1/jupiter'
box-build :: ganymede :: 10.0.3.2
bash bin/vagrant.sh init ganymede 10.0.3.2
ganymede
不幸的是(这实际上是我的问题),当我运行 make metis-a2 或(更具体的说明) make metis-a2-php5-fpm 时, HOSTNAME和HOSTIP变量是从 build-box 目标名称转换而不是我需要转换的目标。
# make metis-a2
make[1]: Entering directory `/home/dragosc/Workspace/a1/jupiter'
make[2]: Entering directory `/home/dragosc/Workspace/a1/jupiter'
box-build :: box-build :: 10.0.3.box-build
bash bin/vagrant.sh init box-build 10.0.3.box-build
make[2]: Leaving directory `/home/dragosc/Workspace/a1/jupiter'
make[1]: Leaving directory `/home/dragosc/Workspace/a1/jupiter'
请你解释一下为什么,还有,请你帮我解决一个问题吗?
非常感谢提前。
注意:如果缺少某些内容,请告诉我,我将其从更大的项目中拉出来。
答案 0 :(得分:0)
发现了我的问题的解决方案,但如果你们认为有更简单的方法,我仍然愿意接受建议。
我没有将变量传递给每个目标,而是将变量传递给我的递归make调用。这对我有用(现在);我仍然遇到另一个问题的问题(使目标以递归方式运行),这也可能在这里产生问题(如果我放弃递归的make调用)。
METIS_A2_PHP5_FPM = metis-a2-php5-fpm-11 # metis-a2-php5-fpm-12
all: ganymede metis-a2
box-build:
@echo ${@} :: $(HOSTNAME) :: $(HOSTIP)
@echo bash bin/vagrant.sh init $(HOSTNAME) $(HOSTIP)
ganymede:
@make ganymede-build HOSTNAME="ganymede" HOSTIP="10.0.3.2"
ganymede-build: box-build nis-server.sh syslog-ng-server.sh
metis-a2: metis-a2-php5-fpm # metis-a2-php5
metis-a2-php5-fpm:
@make metis-a2-php5-fpm-build
metis-a2-php5-fpm-build: $(METIS_A2_PHP5_FPM)
$(METIS_A2_PHP5_FPM):
@make ${@}-build HOSTNAME="${@}" HOSTIP="10.0.3.$(subst metis-a2-php5-fpm-,,$(@))"
metis-a2-php5-fpm-11-build: box-build apache2-php5-fpm.sh