2012-03-24 55 views
2

我想生成自動工具共享和靜態庫,所以到目前爲止,我有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目錄並且存在這樣的文件:

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 2012-03-24 19:36:13

+2

@Andna:你沒有libtool隱藏其庫的選擇。 libtool中的所有內容都是爲了讓您不必關心庫的實際位置。只要您想要引用該庫,只需使用'.la'文件即可。如果你解釋爲什麼你想讓'.so'和'.a'文件可見,那麼我們可以向你展示如何用一種與GNU構建系統兼容的方式來組織你的項目(提醒:Autotools在這裏幫助你創建一個GNU構建系統,而不是你可能習慣的任何構建系統)。 – adl 2012-03-25 11:37:31