2012-03-24 8 views
2

Я пытаюсь создать общую и статическую библиотеку с Autotools, до сих пор у меня естьAutomake и библиотеки

configure.ac:

# Process this file with autoconf to produce a configure script. 

    AC_PREREQ([2.68]) 
    AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) 
    AM_INIT_AUTOMAKE(memory,1.0.0) 
    #AC_CONFIG_SRCDIR([include/memory.h]) 
    #AC_CONFIG_HEADERS([config.h]) 

    # Checks for programs. 
    AC_PROG_CC 

    AM_PROG_CC_C_O 
    AC_PROG_RANLIB 
    AC_PROG_LIBTOOL 


    # Checks for libraries. 

    # Checks for header files. 
    AC_CHECK_HEADERS([stdlib.h]) 

    # Checks for typedefs, structures, and compiler characteristics. 

    # Checks for library functions. 
    AC_FUNC_MALLOC 

    AC_CONFIG_FILES([Makefile]) 
    AC_OUTPUT 

makefile.am в моей основной директории:

lib_LTLIBRARIES = libmemory.la 
libmemory_la_SOURCES = src/memory.c 
libmemory_la_CFLAGS = -I./include 

и я хочу, чтобы он просто создал два файла .a и .so в этом каталоге, но вместо этого он создает ./libs dir и там такие файлы:

libmemory.a 
libmemory.la -> ../libmemory.la 
libmemory.lai 
ibmemory_la-memory.o 
libmemory.so -> libmemory.so.0.0.0 
libmemory.so.0 -> libmemory.so.0.0.0 
libmemory.so.0.0.0 

так что мне делать, чтобы просто создать одну простую библиотеку в статике в динамической версии?

ответ

4

.libs - это каталог, предназначенный для внутренней реализации libtool, другими словами, вы не должны слишком много думать об этом. Вы получаете libmemory.la, который представляет все варианты (статические, общие, ..), которые вы создали. Все они будут правильно установлены, как ожидается, при выполнении make install.

Библиотеки используют различные схемы для управления версиями, а libtool - по умолчанию, поэтому вы получаете libmemory.so.0.0.0.

+0

Хорошо, но я не хочу, чтобы он размещал те библиотеки там, я также не хочу их устанавливать. Я просто хочу, чтобы он помещал файлы .a и .so в тот же каталог, где вызывается autotools. – Andna

+2

@Andna: У вас нет выбора, где libtool скрывает свои библиотеки. Все в libtool сделано так, что вам не нужно заботиться о том, где находятся библиотеки. Просто используйте файл '.la' в любое время, когда хотите обратиться в библиотеку. Если вы объясните причину, по которой вы хотите видеть файлы '.so' и' .a', возможно, мы покажем вам, как организовать проект таким образом, который совместим с GNU Build System (напоминание: Autotools здесь чтобы помочь вам создать GNU Build System, а не любую систему сборки, к которой вы можете привыкнуть). – adl