我获得了最新未发布的版本标签使用 svn 存储库中的源代码
svn co https://ctags.svn.sourceforge.net/svnroot/ctags
我运行了./configure
,但失败并出现以下错误:
config.status: creating Makefile
config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
config.status: error: cannot find input file: config.h.in
[mirror@home ctags-5.7]$ echo $?
1
然后我创建了一个名为的空文件config.h.in
,现在./configure
成功了。
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
config.status: creating config.h
[mirror@home ctags-5.7]$ echo $?
0
运行make
还是失败。
[mirror@home ctags-5.7]$ make
gcc -I. -I. -DHAVE_CONFIG_H -g -O2 -c args.c
In file included from args.c:17:
/usr/include/stdio.h:88: error: two or more data types in declaration specifiers
make: *** [args.o] Error 1
- 为什么这不起作用?
- 如何从 svn 存储库构建 ctags?
答案1
它失败是因为(与准备好的源 tarball 相比)svn 存储库不包含自动工具。
我不太熟悉 AT 或 ctags,但请尝试运行automake
并再次autoconf
运行./configure
。该过程可能位于INSTALL
文件或文档文件夹中的某个位置,您可能需要查找它。
附录:
据(非官方)Gentoo 的 ebuild,跑步autoreconf
就足够了。
附录2:
正如我所说,我不是 AT 大师,我听说世界上只有两位数的 AT 大师。
config.h
不包含在 svn 存储库中,因为它不是人工编写的,并且仅依赖于存储库中的其他文件。开发人员在更改内容时必须经常重新制作它,因此它只是一个需要下载的额外文件,然后在签出更改时立即删除。
另一方面,它是包含在 tarball 中,以使软件的构建不那么痛苦。我相信当人们拥有与开发人员不同的 AT 版本时,它还可以防止一些问题。在这种情况下,它没有真正的负面影响,因为它不依赖于您为哪个系统或体系结构构建,并且从 tarball 构建时其他文件“通常”不会被修改。也就是说,除非您需要应用一些补丁。那么您可能无论如何都需要重新生成一些东西。
我对 AT 的方法是尝试不同的方法,直到成功或放弃。不同的文件来自不同的命令,有些命令会神奇地启动其他命令。在 Wikipedia 页面中,有一个流程图。我觉得它没什么用,但也许你会用得上。
我建议你远离它。如果你认为你需要在自己的项目中使用它,那就去使用构建或者斯康斯或者其他任何当时有效并且简单的事情。
答案2
我在我的 Linux 系统上遇到了类似的问题,我通过运行“autoheader”和“autoconf”(从解压后的 tarball 的“trunk”子目录中)解决了该问题前运行“./configure”。后续的“make”和“make install”操作运行顺利。
看来 autoconf 知道如何从 configure.at(在 tarball 中)进行配置,但您必须先运行 autoheader 才能创建 .in 文件,configure 会使用这些 .in 文件来生成头文件,然后在您实际运行 ./configure 时使用这些头文件。
答案3
为什么你不这么做$ sudo apt-get install exuberant-ctags
或者做任何适合你的 Linux 风格的事情?