2015-06-25 7 views
6

Ich habe einige C-Code, der für Linux geschrieben wurde und stützt sich auf Sockets und arpa/inet.h sowie libusb.h und ich möchte kompilieren dies für Windows unter MinGW. (Beachten Sie, dass das aktuelle Projekt nur ein sehr einfaches Makefile hat und nicht auf Autotools angewiesen ist).Erste Schritte mit Gnulib auf MinGW und nicht vertraut (genug) mit Autotools

Es sieht so aus, als wäre die Verwendung von gnulib eine gute Möglichkeit, dies für Windows unter MinGW zu kompilieren, und ich habe in diese Richtung begonnen, aber es scheint, dass wenn Sie mit Autotools nicht vertraut sind das tiefe Unkraut sehr schnell.

Also hier ist, was ich versucht habe:

$ gnulib-tool --import getsockname,getsockopt,setsockopt,socket,socketlib,sockets,socklen,sys_socket,arpa_inet,inet_ntop,inet_pton,netinet_in 

Es läuft und gibt mir die folgende Meldung am Ende:

Don't forget to 
    - add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac, 
    - mention "lib" in SUBDIRS in Makefile.am, 
    - mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am, 
    - mention "m4/gnulib-cache.m4" in EXTRA_DIST in Makefile.am, 
    - invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC, 
    - invoke gl_INIT in ./configure.ac. 

Ok, ich habe keine configure.ac hatte noch ein Makefile. Uhr, sie ich geschaffen, um (gemäß den Anweisungen oben) folgt:

$ cat Makefile.am 
SUBDIRS = lib 
ACLOCAL_AMFLAGS = -I m4 
EXTRA_DIST = m4/gnulib-cache.m4 

Und ...

Nun zu diesem Zeitpunkt scheinen die Gnulib-Dokumente davon auszugehen, dass Sie mit Autotools vertraut sind, so dass sie alle Anweisungen weglassen, was Sie als nächstes mit Autotools tun müssen.

Von dem, was ich in der Lage gewesen, aus der Lektüre verschiedene Foren, um herauszufinden, scheint es, dass die nächsten Schritte auszuführen, sind:

$ aclocal 
$ autoconf 
$ automake 
$ configure 

aber ... wenn ich auto lief ich bekam:

$ automake 
configure.ac: no proper invocation of AM_INIT_AUTOMAKE was found. 
configure.ac: You should verify that configure.ac invokes AM_INIT_AUTOMAKE, 
configure.ac: that aclocal.m4 is present in the top-level directory, 
configure.ac: and that aclocal.m4 was recently regenerated (using aclocal). 
lib/Makefile.am:30: library used but `RANLIB' is undefined 
lib/Makefile.am:30: The usual way to define `RANLIB' is to add `AC_PROG_RANLIB 

' lib/Makefile.am: 30: bis configure.ac' and run wieder autoconf'.

Hmmm ... Ok, das sind wahrscheinlich nur ein paar Sachen, die ich in meiner Makefile.am vermisse (weil ich nicht ganz sicher bin, was in ein Makefile.am gehen soll) ... also einen Schritt zurück .. . ich die configure-Datei in der Lage, die oben in dem autoconf Schritt erstellt wurde ausführen soll:

$ ./configure 

checking for gcc... gcc 
checking whether the C compiler works... yes 
checking for C compiler default output file name... a.exe 
checking for suffix of executables... .exe 
checking whether we are cross compiling... no 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether gcc accepts -g... yes 
checking for gcc option to accept ISO C89... none needed 
./configure: line 2497: gl_EARLY: command not found 
./configure: line 2498: gl_INIT: command not found 
rm: cannot lstat `conftest.exe': Permission denied 

von dem, was ich gelesen habe durch googeln um es wie die gl_EARLY und gl_INIT scheint sollte ergreifen Betreuung durch die Linie hinzugefügt, um die Makefile.am-Datei (ACLOCAL_AMFLAGS = -I m4), aber an diesem Punkt bin ich nicht ganz sicher, dass ich die Autotools Teil davon richtig machen. Kann jemand darauf hinweisen, was ich hier falsch mache?

Antwort

3
  1. hinzufügen AC_CONFIG_MACRO_DIR([m4]) zu configure.ac und wird es gnulib Makros in m4 Verzeichnis
  2. hinzufügen AM_INIT_AUTOMAKE
  3. AC_CONFIG_FILES sollte nicht nur enthalten gnulib Makefile, aber Ihr Makefile zu
  4. Sie können alle Sachen mit einzelnen Anruf finden regenerieren zu autoreconf