建议使用Autoconf Archive宏和其他第三方宏的方法

cfa*_*771 8 git automake autoconf autotools

我在Autoconf Archive中找到了几个有用的宏,还有一个有用的m4文件,它有助于测试Boost库的支持.Autoconf Archive由GNU托管,Boost m4帮助器作为GitHub仓库托管.我想在一个使用Autotools并由git管理的C++项目中使用它们.

显然,可以手动下载它们并插入我的项目的git仓库.但有更推荐的方法吗?

例如,通过使构建过程自动下载它们而不是手动更新它们,可以确保第三方文件是最新版本.它还有助于将源与外部文件分开,因为第三方文件实际上不是纯源代码的一部分,而是外部下载的文件.

如果这是一件好事,应该通过autogen.sh手动完成吗?或者使用automake.am?或两者兼而有之(例如在autogen.sh下载文件和在automake中测试版本+更新)?

我想将它们保存在git repo中并不是一场灾难(就像COPYING,git.mk和其他人一样),但是让构建过程从Web更新到最新版本仍然很有用.

lda*_*v1s 5

相反,autoconf宏文件是相应源文件的一部分,其重要性足以在make disttarball中使用。实际上,大多数autoconf宏的更改频率不足以保证生成中具有某种更新功能。即使它们确实经常更新,也不能保证更新后的宏不会破坏您现有的内部版本。

将宏置于源代码控制下是一个好主意。

编辑:我同意@delinquentme的观点,将它们添加为git子模块会很好(可以锁定版本,轻松更新)。但是我发现这种方法存在一些问题。

第一个是git(IIUC)甚至不支持子模块的部分检出。GNU Autoconf档案库(例如)有很多宏,您可能只需要其中的几个。其余的未使用文件和宏仍将存在,未使用并妨碍。

第二个问题是AC_CONFIG_MACRO_DIR只在一个目录中找到宏,而在目录中没有子目录搜索,这使得使用多个子模块变得很烦人。您可以通过在不显眼的地方检出子模块并将它们符号链接到来实现AC_CONFIG_MACRO_DIR

对我来说,宏的上游历史并不是那么重要。这就是上游的VCS的目的:-)。