繁体   English   中英

使用makefile生成版本信息

[英]Use makefile to generate version info

我的应用程序makefile具有一些版本变量,我希望我的makefile使用该变量来生成version.h文件。 我目前有通用的makefile设置,例如:

version :
    @echo "Generating version.h ..."
    @echo line > version.h
    @echo etc >> version.h

debug : blah blah version blah blah
release : blah blah version blah blah

.DEFAULT_GOAL := debug release

应用程序级makefile是:

MAJOR_VERSION = 1
MINOR_VERSION = 42

include makefile.common

这可行,但最终会两次生成版本文件。 如何使它仅生成一次-这样的version某种程度上取决于应用程序级makefile的更改。 并不是说两次生成都非常慢,我只是想做到这一点。

另外,我可能有一个不需要版本信息的应用程序,如何有条件地生成此文件?

在我看来,将所有有意义的配方目标与所有包含的makefile文件相关联通常是一件好事,因为通常很难看到哪个makefile文件(甚至包含在配方之后)也可能包含影响配方的变量。

请记住,这是您对两个问题的答案(我还添加了其他一些“最佳实践”,因为您想学习“正确的方法”):

Makefile文件:

MAJOR_VERSION := 1
MINOR_VERSION := 42

include makefile.common

makefile.common:

.PHONY: all debug release
all: debug release

VERSION_FILE := $(if $(filter %OR_VERSION, $(.VARIABLES)), version.h)
debug : blah blah $(VERSION_FILE) blah blah
release : blah blah $(VERSION_FILE) blah blah

.SECONDEXPANSION:
version.h : $$(MAKEFILE_LIST)
    @echo "Generating $@ ..."
    @echo line > $@
    @echo etc >> $@

您希望使目标成为文件,例如:

version.h :
    @echo "Generating version.h ..."
    @echo line > version.h
    @echo etc >> version.h

debug : blah blah version.h blah blah
release : blah blah version.h blah blah

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM