[英]Autotools and a nested project project with ordinary Makefile
這個問題擴展了問題: 如何使用自動工具處理子項目?
所以我在modules / libfoo中有一些帶有自己的Makefile(不是GNU autotools)的項目
我添加了SUBDIRS = include / jsonbox Makefile.am,它可以正常編譯,但前提是我調用./configure並從頂層目錄進行make。
如果創建一個子目錄,請說build,然后從中運行../configure,在make時會出錯:
Making all in modules/libfoo
/bin/sh: line 17: cd: modules/libfoo: No such file or directory
make: *** [all-recursive] Error 1
有可能處理嗎? 我需要針對不同的拱門和CFLAGS的多個構建目錄。
編輯:由於它在文檔中建議,我在一個嵌套項目中創建了一個GNUmakefile.in。 但是它仍然不能與VPATH一起使用:
Making all in modules/libfoo
make[1]: Entering directory `/home/galadog/test/build/moudles/libfoo'
GNUmakefile:2: Makefile: No such file or directory
make[1]: *** No rule to make target `Makefile'. Stop.
make[1]: Leaving directory `/home/galadog/test/build/moudles/libfoo'
make: *** [all-recursive] Error 1
Edit2實際的Makefile可以在這里看到: https : //github.com/anhero/JsonBox/blob/master/Makefile
可悲的是,沒有以下任何一項,您將無法正確實現:
您鏈接的文檔主要側重於使用make distcheck
解決問題,而不支持實際構建。
但是,有一個簡單的技巧可以用最少的工作量來完成-將整個子樹復制到build目錄。 這不是一個很好的解決方案,但是它將使子樹構建正常工作:
SUBDIRS = modules/libfoo
# and possibly all other -recursive targets you'll be using
all-recursive: copy-libfoo
copy-libfoo:
mkdir -p modules
cp -R -H $(top_srcdir)/modules/libfoo modules/
但是正如我所說,這很丑。 上游Makefile仍然需要定義正確的automake目標( all
, install
等),因此,在您的情況下,還需要在項目GNUmakefile
中添加GNUmakefile
,例如:
include Makefile
INSTALL:
這將提供一個虛擬目標以避免*** No rule to make target 'install'
; 可能也是這樣。 如果要使用make dist
,則使用EXTRA_DIST
,但這已在鏈接文檔中進行了介紹。
老實說,您在濕滑的地面上。 如果我是您,我要么只是不使用那個項目,要么忽略它,因為維護它比從頭開始寫相同的東西要困難。
我會考慮的第二種解決方案是正確的一種方法是在主Makefile.am
復制Makefile.am
,而不對該子目錄使用遞歸automake:
LIBRARIES = modules/libfoo/libfoo.a
modules_libfoo_libfoo_a_SOURCES = modules/libfoo/src/a.c # ...
# and possibly some...
EXTRA_DIST = # ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.