2015-06-25 8 views
6

के साथ परिचित (पर्याप्त) नहीं है मुझे कुछ सी कोड मिला है जो लिनक्स के लिए लिखा गया था और सॉकेट और arpa/inet.h पर निर्भर करता है साथ ही libusb.h और मैं संकलन करना चाहता हूं यह मिनीजीडब्ल्यू के तहत विंडोज के लिए है। (ध्यान दें कि वर्तमान प्रोजेक्ट में बस एक बहुत ही सरल मेकफ़ाइल है और यह ऑटोटूल पर भरोसा नहीं करता है)।MinGW पर gnulib के साथ प्रारंभ करना और autotools

ऐसा लगता है कि gnulib का उपयोग मिनीगू के तहत विंडोज के लिए संकलित करने में सक्षम होने का एक अच्छा तरीका होगा और मैंने उस दिशा में शुरुआत की है, लेकिन ऐसा लगता है कि यदि आप autotools से बहुत परिचित नहीं हैं तो आप गहरी खरबूजे वास्तव में जल्दी से।

तो यहाँ है कि मैं क्या कोशिश की है:

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

यह चलाता है और मुझे अंत में निम्न संदेश देता है:

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. 

ठीक है, मेरे पास कोई configure.ac और न ही एक Makefile था। बजे, तो मैं उन्हें (निर्देशों के अनुसार इसके बाद के संस्करण) इस प्रकार बनाया:

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

और ...

0,123,
$ cat configure.ac 
AC_INIT([configure.ac]) 
AC_CONFIG_FILES([lib/Makefile]) 
AC_PROG_CC 
gl_EARLY 
gl_INIT 

अब इस बिंदु पर, gnulib डॉक्स ग्रहण करने के लिए है कि आप autotools साथ घनिष्ठ रूप से परिचित हैं लगता है, तो वे आप अगले autotools साथ क्या करने की जरूरत के लिए निर्देश के सभी को छोड़ दें।

मैं क्या विभिन्न मंचों पढ़ने से यह पता लगाने कर लिया है से, ऐसा लगता है कि अगले चरणों के चलाने के लिए कर रहे हैं:

$ aclocal 
$ autoconf 
$ automake 
$ configure 
हालांकि

... जब मैं automake भाग गया मुझे मिल गया:

$ 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: configure.ac' and run autoconf' फिर से।

हम्म ... ठीक है शायद यह कुछ चीजें हैं जो मैं अपने मेकफ़ाइल.एम में लापता हूं (क्योंकि मुझे पूरी तरह से यकीन नहीं है कि मेकफ़ाइल.एम में क्या जाना चाहिए) ... तो एक कदम वापस जा रहा है .. । के आसपास यह gl_EARLY और gl_INIT की तरह लगता है लाइन द्वारा की देखभाल की जानी चाहिए googling द्वारा

$ ./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 

मैं क्या पढ़ा है से: मैं autoconf चरण में ऊपर बना लिया गया है कि कॉन्फ़िगर फ़ाइल को चलाने के लिए सक्षम होना चाहिए Makefile.am फ़ाइल (ACLOCAL_AMFLAGS = -I m4) में जोड़ा गया है, लेकिन इस बिंदु पर मुझे पूरी तरह से यकीन नहीं है कि मैं इस के autotools भाग को सही तरीके से कर रहा हूं। क्या कोई यह बता सकता है कि मैं यहां क्या गलत कर रहा हूं?

उत्तर

3
  1. configure.ac को AC_CONFIG_MACRO_DIR([m4]) जोड़ें और यह m4 निर्देशिका में gnulib मैक्रो मिलेगा
  2. जोड़े AM_INIT_AUTOMAKE
  3. AC_CONFIG_FILES शामिल करना चाहिए केवल Makefile gnulib नहीं है, लेकिन अपने Makefile भी
  4. आप एक फोन के साथ सभी सामान को पुनर्जीवित कर सकते हैं autoreconf