【发布时间】:2013-05-10 16:12:28
【问题描述】:
我有一个 linux 下的 c++ 项目。我正在使用 GNU make 和 GCC
我有以下规则:
all: ...
version:
config:
rm -f config.h
@$(MAKE) --no-print-directory config.h
config.h:
# ..... create the file config.h here
make 版本增加内部版本号。 1.1-123,然后是1.2-124 ...等。版本写在config.h文件中,config.h包含在项目的所有文件中。
现在的想法是在以下一种情况下重新构建 config.h: - 发布程序版本时(而不仅仅是开发/测试) - 当它不存在时
所以我不想建立这种依赖关系:
all: config
config: version
因为这样配置文件将在每次 make 时重建,并且每个文件都将被重新编译,而不仅仅是更改的文件。所以我不想在开发时重新构建配置文件,但前提是我这样做make release_version
现在。假设规则是:
release_version: config version all
问题是,当我执行make release_version -j 3 时,它会同时生成所有 3 个目标(配置、版本、全部),这意味着该版本可能还没有准备好创建 config.h,然后是 config。 h 可能还没有为all 做好准备。所以我必须做这个依赖:
release_version:全部 全部:配置 配置:版本
但仅在执行make release_version 时。如果make all 被执行,我不想拥有这些依赖。
也许我需要类似的东西:
release_version: version_release config_release all_release
all_release: 配置 config_release:配置 version_release: 版本
【问题讨论】:
标签: linux gcc makefile gnu-make