我獲得了最新的、未發布的版本標籤使用來自 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 專家,我聽說世界上這樣的人只有兩位數。
config.h
不包含在 svn 儲存庫中,因為它不是由人編寫的,它僅依賴儲存庫中的其他檔案。無論如何,開發人員在更改內容時都必須經常重新製作它,因此這只是一個需要下載的額外文件,然後在檢查更改時立即刪除。
另一方面,它是包含在 tarball 中是為了減輕軟體建構的痛苦。我相信,當人們使用與開發人員不同的 AT 版本時,它也可以防止一些問題出現。在這種情況下,它沒有真正的背面,因為它不依賴您建立的系統或體系結構,並且在從 tarball 建置時「通常不會」修改其他檔案。也就是說,除非您有一些需要應用的補丁。那麼無論如何你可能都需要重新生成一些東西。
我的 AT 方法是嘗試不同的事情,直到它起作用為止,否則我就放棄它。不同的檔案來自不同的命令,並且某些命令神奇地啟動其他命令。在維基百科頁面中,有一個流程圖。我不認為它有幫助,但也許你可能會。
我建議遠離它。如果您認為需要將它用於您自己的項目,請使用cmake或者斯康斯或其他任何效果很好並且當時很簡單的東西。
答案2
我在 Linux 系統上遇到了類似的問題,我透過執行「autoheader」和「autoconf」(來自解壓縮的 tarball 的「trunk」子目錄)解決了這個問題前執行“./configure”。隨後的「make」和「make install」操作運作順利。
似乎 autoconf 知道如何從 configure.at (位於 tarball 中)進行配置,但是您必須先運行 autoheader 才能創建 .in 文件,configure 使用這些文件來生成頭文件,然後在以下情況下使用這些文件你實際上運行了./configure。
答案3
為什麼不做$ sudo apt-get install exuberant-ctags
或做任何適合你的 Linux 風格的事情呢?