Makefile 生成器创建两个文件

2024-03-25

我有一个生成器程序,可以创建两个版本文件,例如ver.h and ver.cpp。我的最终构建目标取决于这两个文件,构建这两个文件的规则就是一个程序。如果我这样做:

build : ver.h ver.cpp

ver.h ver.cpp :
    ./gen/version/program

然后可以运行并行构建program两次,虽然不是bad只是太过分了。我想我可以让它们都依赖于一个虚假的目标:

ver.h ver.cpp : do-version-impl

do-version-impl:
    ./gen/version/program

.PHONY : do-version-impl

这是最好的方法吗?必须引入一个虚假的规则来做到这一点有点可笑。


使用虚假目标作为先决条件是一个坏主意。program即使ver.*文件存在,这是误报错误。

更巧妙的是,只有当该文件是带有配方的规则的目标时,GNU Make 才保证更新其文件时间戳。所以在这里,尽管program总是运行,任何反过来依赖于ver.*文件可能根本不会更新!

在我看来,最好不要为每个目标编造不自然的模式,而是要明确:

您正在生成一个“主”文件,即ver.cpp。使用“无操作”配方;对于另一个,可以将其放在同一行,如下所示:

ver.h: ver.cpp ;
ver.cpp: Makefile
    ./gen/version/program

该方法从您所写的内容开始,但添加了非常重要的内容;.

如果您没有“主”文件的自然候选者,那么我认为最好使用“哨兵”:

ver.h ver.cpp: sentinel ;

sentinel: Makefile
    ./gen/version/program
    touch $@

同样,此方法与您的方法之一类似,但非常重要的是,不使用虚假文件,而是使用真实文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Makefile 生成器创建两个文件 的相关文章

随机推荐