FreeBSD下GNU Make拆分版本号后变量为空是什么原因?
Makefile变量为空问题原因分析
核心原因是FreeBSD环境下默认make命令的语法不兼容你编写的GNU Make规则:
- FreeBSD系统自带的默认构建工具是BSD Make,你代码中用到的
subst、word属于GNU Make专属的字符串处理函数,BSD Make无法识别这类函数语法,解析V1、V2变量时函数调用不会被执行,直接返回空值,因此最终生成的文件名里变量位置为空。 - 你虽然已经安装了GNU Make 4.2.1,但执行构建时没有调用对应的
gmake命令,才会触发该问题。
修复方案
直接使用GNU Make对应的命令执行构建即可得到预期结果:
gmake hello
如果需要适配BSD Make的语法,可改用系统命令实现变量拆分,示例如下:
VER := 13.1-9.6 # 调用shell的cut命令拆分版本号 V1 != echo ${VER} | cut -d '-' -f 1 V2 != echo ${VER} | cut -d '-' -f 2 hello: cp ./path/file.txt ./path/file_${V1}.txt cp ./path/file.txt ./path/file_${V2}.txt
内容的提问来源于stack exchange,提问作者rahul Kushwaha
相关产品推荐
相关产品推荐

