首页 > 解决方案 > 将变量从 Makefile 传递到可执行文件的最佳方法是什么?

问题描述

我想在编译时在 Makefile 中生成一个变量,并在运行时在我的可执行文件中使用它。

最小示例:在 Makefile 我生成变量COMMIT_ID,其中包含最新提交的 ID:COMMIT_ID=$(git rev-parse --verify HEAD)

Makefile 还会生成一个可执行文件,例如executable.elf. 生成的C源代码executable.elf打印COMMIT_ID.

最好的方法是什么?

标签: makefile

解决方案


书呆子狙击手 HardcoreHenry 诱使我找到更好(或至少不同)的解决方案。想出了这个,在存储库中有一个文件,其名称表示最后一次构建存储库的提交:

COMMIT_ID := $(shell git rev-parse --verify HEAD)

# target is made if it does not exist
$(COMMIT_ID).commit_id:
    @# clean other commits than current
    rm -f *.commit_id
    @# placeholder for current commit
    touch $@

commit_id.h: $(COMMIT_ID).commit_id
    echo "#define COMMIT_ID ${COMMIT_ID}" > $@

推荐阅读