2016-11-29 32 views
7

ile çapraz derleme Bu project'u MinGW ile çapraz derlemeye çalışıyorum.Gnulib tabanlı bir projeyi MinGW

Proje, yapı sistemi olarak autotools'u kullanır ve libcurl, CUnit, Jansson ve bazı gnulib modüllerine bağlıdır.

$ gnulib-tool --update 
$ autoreconf -fi 
$ CURL_CFLAGS="-I/home/user/mingw64/usr/local/include" \ 
CURL_LIBS="-L/home/user/mingw64/usr/local/lib -lcurl" \ 
JANSSON_CFLAGS="-I/home/user/mingw64/usr/local/include" \ 
JANSSON_LIBS="-L/home/user/mingw64/usr/local/lib -ljansson" \ 
CUNIT_CFLAGS="-I/home/user/mingw64/usr/local/include" \ 
CUNIT_LIBS="-L/home/user/mingw64/usr/local/lib -lcunit" \ 
./configure --host=x86_64-w64-mingw32 
$ make 

Ve bu hatayı alıyorum:

Bütün bağımlılıklar /home/user/mingw64

altında x86_64-w64-mingw32 için derlenmiş ve kurduktan koşuyorum

make all-recursive 
make[1]: Entering directory '/home/user/projects/shill' 
Making all in po 
make[2]: Entering directory '/home/user/projects/shill/po' 
make[2]: Nothing to be done for 'all'. 
make[2]: Leaving directory '/home/user/projects/shill/po' 
Making all in lib 
make[2]: Entering directory '/home/user/projects/shill/lib' 
make[2]: *** No rule to make target 'lib/errno.h', needed by 'all'. Stop. 
make[2]: Leaving directory '/home/user/projects/shill/lib' 
Makefile:1897: recipe for target 'all-recursive' failed 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory '/home/user/projects/shill' 
Makefile:1429: recipe for target 'all' failed 
make: *** [all] Error 2 

errno.h gnulib modüllerinin parçasıdır .

# Find gnulib headers. 
ACLOCAL_AMFLAGS = -I m4 

AM_CPPFLAGS = \ 
    -DLOCALEDIR='"$(localedir)"' \ 
    -Ilib -I$(top_srcdir)/lib \ 
    -Isrc -I$(top_srcdir)/src \ 

Ama çözüm bilemiyorum: Ben sorunun Makefile.am bu bölüm geldiğini düşünüyorum. Tam olarak gnulib manual'da açıklanan talimatları takip ettim.

+1

Bazı Makefile'de "all: ... lib/errno.h ... gibi bir satır var'(veya değişken ikameden sonra buna genişleyen bir çizgi) probleminizin en önemli sebebidir. –

+0

@RossRidge Tüm 'Makefile'ler autotools tarafından otomatik olarak oluşturulur, böylece hatayı bulabilir ve düzeltebilirsem bile işe yaramaz. Makefile rejenere edilecek ve düzeltmeyi geçersiz kılacak. –

+0

Bu yüzden kaynağı değiştirerek düzeltin. –

cevap

3

Bu sorun için bir çözüm bulmayı başardım. Görünüşe göre autotools düşündüğüm kadar kolay değil.

  1. Ben --makefile-name parametresini belirterek, bu kez gnulib modüllerini yeniden gerekiyordu. yani. automake configure.ac dosyaları oluşturulan gelen
    $ gnulib-tool ... --makefile-name=gnulib.mk ... 
    
  2. Ben lib/Makefile kaldırıldı. Bunu yerine:
    dnl Put automake generated files results here 
    AC_CONFIG_FILES([Makefile 
         po/Makefile.in 
         lib/Makefile]) 
    

    Şimdi var:
    dnl Put automake generated files results here 
    AC_CONFIG_FILES([Makefile 
          po/Makefile.in]) 
    
  3. ben Makefile.am içinde lib formu SUBDIRS kaldırıldı. yani. Onun yerine:

    # Subdirectories to descend into. 
    SUBDIRS = po lib 
    

    Ben:

    # Subdirectories to descend into. 
    SUBDIRS = po 
    
  4. Bu içerikle local.mk denilen lib dizinde yeni bir dosya oluşturuldu:

    include lib/gnulib.mk 
    
    # Allow "make distdir" to succeed before "make all" has run. 
    dist-hook: $(noinst_LIBRARIES) 
    .PHONY: dist-hook 
    
  5. Ve Makefile.am de dahil.

    $ ./build-aux/prefix-gnulib-mk --lib-name=libshill lib/gnulib.mk 
    

öyleydi:

include $(top_srcdir)/lib/local.mk 
  • Sonunda bu komutu çalıştırmak zorunda kaldı.

  • +0

    Yığın ve Stackoverflow üzerinde iyi bir başlangıç! Sizin için neyin işe yaradığını burada belgelemek için zaman ayırdığınız harika. –