Makefile如何在中途定义变量?

首先说一下我是做Web开发的,对 C 和 Makefile 一窍不通。但是公司就是把打包的事情甩给我了,我也没办法。
原来的 Makefile 反正我是看不懂,我只是在最后打完RPM包的地方自己接了一个 Bash 脚本,之后在外部把剩下的事情搞定。
现在需求是这样的,需要根据入口打出两个不同的包出来,类似 make build-developmake build-release。反正我不想多动原来的代码,于是:

build-release: _init _try_inc_release_num _build

build-develop: _init2 _try_inc_release_num _build

之后:

_init: $(saved_branch) $(saved_version) $(saved_release_num) $(saved_release_detail)
    TARGETVERSION='RELEASE' //后加的,但是不好用
    echo $TARGETVERSION //后加的,但是不好用
    find . -name *.sh |xargs chmod a+x //后加的

_init2: $(saved_branch) $(saved_version) $(saved_release_num) $(saved_release_detail)
    TARGETVERSION='DEVELOP' //后加的,但是不好用
    echo $TARGETVERSION //后加的,但是不好用
    find . -name *.sh |xargs chmod a+x //后加的

总之就是想增加个变量 $TARGETVERSION ,在整个 Makefile 完成的末尾,把这个参数传到我自己写的 Bash 中就行了。

问题是这种写法在 sh 或 bash 中都 OK。

[root@localhost html]# cat test.sh
#!/bin/sh
#set -euo pipefail
TARGETVERSION='RELEASE'
echo $TARGETVERSION
[root@localhost html]# ./test.sh 
RELEASE
[root@localhost html]# 

但是在 Makefile 里不能用。

[root@localhost builder]# make build-release

...
TARGETVERSION='RELEASE'
echo ARGETVERSION
ARGETVERSION
...

所以请教下这里该如何做?

阅读 3.8k
1 个回答
echo $(TARGETVERSION)
加上括号试试
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进