如何在 makefile 中将我的 git 提交附加到我的 bin 中?
How can I append my git commit to my bin within makefile?
我正在尝试在 make 文件中创建一个规则来读取 git 提交并追加到二进制文件的名称中,到目前为止,我正在努力解决将保存提交的变量这一事实似乎是空的,
append_git_commit: $(preName)/FLASH.bin
GIT_COMMIT=$(git log -1 --pretty=format:%h)
echo "$(info GIT_COMMIT="$(GIT_COMMIT)")"
显示这个
GIT_COMMIT=
echo ""
这是为什么?我希望 GIT_COMMIT 像 GIT_COMMIT=62f9926a
一样保存我的哈希
其次,如何将此 GIT_COMMIT
内容附加到我的 FLASH.bin
以便结果为
FLASH_62f9926a.bin
谢谢
您当前的Makefile
存在多个问题。
GIT_COMMIT=$(git log -1 --pretty=format:%h)
没有按照您的预期执行,因为它是 make 变量扩展而不是 shell 中的命令扩展。要将其传递给基础 shell,您必须转义 $
:
GIT_COMMIT=$$(git log -1 --pretty=format:%h)
在下一行,$(GIT_COMMIT)
指的是 GIT_COMMIT
变量而不是 shell 变量。
然后遇到一个问题:
从 make 执行的 - setting variable in shell 不会设置 make 变量(也意味着
info
无法访问上面 shell 命令中发生的事情); shell 是 make 的子进程
- 并且配方的每一行都在其自己的 shell 实例中运行(因此一行中的变量在下一行中不可见)
如果我明白你在追求什么,我可能会这样做:
GIT_COMMIT := $(shell git log -1 --pretty=format:%h)
append_git_commit: $(preName)/$(GIT_COMMIT)_FLASH.bin
$(preName)/$(GIT_COMMIT)_FLASH.bin: $(preName)/FLASH.bin
cp "$<" "$@"
使用 make 变量并引入中间目标,只要没有新的修订并且 $(preName)/FLASH.bin
没有更新,也不需要为 append_git_commit
做任何事情,因为它现在知道它需要从 $(preName)/FLASH.bin
创建 $(preName)/$(GIT_COMMIT)_FLASH.bin
并且在评估 Makefile
时所有细节都知道。
我正在尝试在 make 文件中创建一个规则来读取 git 提交并追加到二进制文件的名称中,到目前为止,我正在努力解决将保存提交的变量这一事实似乎是空的,
append_git_commit: $(preName)/FLASH.bin
GIT_COMMIT=$(git log -1 --pretty=format:%h)
echo "$(info GIT_COMMIT="$(GIT_COMMIT)")"
显示这个
GIT_COMMIT=
echo ""
这是为什么?我希望 GIT_COMMIT 像 GIT_COMMIT=62f9926a
其次,如何将此 GIT_COMMIT
内容附加到我的 FLASH.bin
以便结果为
FLASH_62f9926a.bin
谢谢
您当前的Makefile
存在多个问题。
GIT_COMMIT=$(git log -1 --pretty=format:%h)
没有按照您的预期执行,因为它是 make 变量扩展而不是 shell 中的命令扩展。要将其传递给基础 shell,您必须转义 $
:
GIT_COMMIT=$$(git log -1 --pretty=format:%h)
在下一行,$(GIT_COMMIT)
指的是 GIT_COMMIT
变量而不是 shell 变量。
然后遇到一个问题:
-
从 make 执行的
- setting variable in shell 不会设置 make 变量(也意味着
info
无法访问上面 shell 命令中发生的事情); shell 是 make 的子进程
- 并且配方的每一行都在其自己的 shell 实例中运行(因此一行中的变量在下一行中不可见)
如果我明白你在追求什么,我可能会这样做:
GIT_COMMIT := $(shell git log -1 --pretty=format:%h)
append_git_commit: $(preName)/$(GIT_COMMIT)_FLASH.bin
$(preName)/$(GIT_COMMIT)_FLASH.bin: $(preName)/FLASH.bin
cp "$<" "$@"
使用 make 变量并引入中间目标,只要没有新的修订并且 $(preName)/FLASH.bin
没有更新,也不需要为 append_git_commit
做任何事情,因为它现在知道它需要从 $(preName)/FLASH.bin
创建 $(preName)/$(GIT_COMMIT)_FLASH.bin
并且在评估 Makefile
时所有细节都知道。