簡體   English   中英

自動工具和帶有普通Makefile的嵌套項目項目

[英]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

可悲的是,沒有以下任何一項,您將無法正確實現:

  1. 修改/替換上游Makefile,
  2. 為上游庫添加自己的生成規則,並忽略其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目標( allinstall等),因此,在您的情況下,還需要在項目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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM