如何使用autotools在libdir的子目录中安装lua模块

如何使用autotools在libdir的子目录中安装lua模块,lua,makefile,autotools,configure,Lua,Makefile,Autotools,Configure,我已经编写了一个使用autotools编写的小lua模块,我想修改它的组织: 现在我在主目录中有这个: autogen.sh configure.ac Makefile.am src file1.c file2.c file3.c autogen.sh的 #!/bin/sh echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS || exit 1 echo "Running libtoolize..."; libto

我已经编写了一个使用autotools编写的小lua模块,我想修改它的组织:

现在我在主目录中有这个:

autogen.sh
configure.ac
Makefile.am
src
    file1.c
    file2.c
    file3.c
autogen.sh的

 #!/bin/sh
 echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS || exit 1
 echo "Running libtoolize..."; libtoolize --copy --automake || exit 1;
 echo "Running autoheader..." ; autoheader || exit 1
 echo "Running autoconf..." ; autoconf || exit 1
 echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
 ./configure "$@"
配置.ac

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([lua-clangc], [0.0.1], [cedlemo@gmx.com])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC(clang gcc)
# Checks for libraries.
PKG_CHECK_MODULES([DEPS], [lua])
#LUA_VERSION = $(pkg-config --version)
#AC_SUBST([LUA_VERSION])
# Checks for header files.
AC_CHECK_HEADERS([string.h stdlib.h clang-c/Index.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AM_INIT_AUTOMAKE(1.13 dist-bzip2 foreign subdir-objects)
LT_PREREQ(2.4)
LT_INIT
AC_CONFIG_FILES([
  Makefile
])
AC_OUTPUT
以及Makefile.am

MAINTAINERCLEANFILES = \
Makefile.in aclocal.m4 config.h.in configure \
depcomp install-sh missing compile config.sub \
config.guess ltmain.sh compile

lib_LTLIBRARIES = src/clangc.la
src_clangc_la_SOURCES = src/clangc.c src/indexlib.c src/translationunitlib.c src/constants.c src/clangc_module_functions.c
src_clangc_la_LDFLAGS = -module -avoid-version -shared -llua -lm -lclang -fPIC 
我使用以下命令编译和安装lua模块:

./autogen.sh --libdir=/usr/lib/lua/5.3
make
sudo make install
我的文件安装在/usr/lib/lua/5.3中

/usr/lib/lua/5.3/clangc.so
/usr/lib/lua/5.3/clangc.la
我只想使用

./autogen.sh --prefix=/usr
configure.ac脚本构建libdir如下:

libdir=prefix + /lib/lua/ + LUA_VERSION + /clangc/
AC_PREREQ([2.69])
AC_INIT([lua-clangc], [0.0.1], [cedlemo@gmx.com])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC(clang gcc)

# Checks for libraries.
PKG_CHECK_MODULES([DEPS], [lua])
LUA_VERSION=$(pkg-config --modversion lua | awk -F "." '{print $1"."$2}')
AC_SUBST([LUA_VERSION])

libdir=$prefix/lib/lua/$LUA_VERSION/clangc
# Checks for header files.
AC_CHECK_HEADERS([string.h stdlib.h clang-c/Index.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AM_INIT_AUTOMAKE(1.13 dist-bzip2 foreign subdir-objects)
LT_PREREQ(2.4)
LT_INIT
AC_CONFIG_FILES([
  Makefile
])
AC_OUTPUT

(我已经找到了在configure.ac中获取LUA_版本的方法)

我总是这样回答自己:

我只需修改configure.ac,如下所示:

libdir=prefix + /lib/lua/ + LUA_VERSION + /clangc/
AC_PREREQ([2.69])
AC_INIT([lua-clangc], [0.0.1], [cedlemo@gmx.com])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC(clang gcc)

# Checks for libraries.
PKG_CHECK_MODULES([DEPS], [lua])
LUA_VERSION=$(pkg-config --modversion lua | awk -F "." '{print $1"."$2}')
AC_SUBST([LUA_VERSION])

libdir=$prefix/lib/lua/$LUA_VERSION/clangc
# Checks for header files.
AC_CHECK_HEADERS([string.h stdlib.h clang-c/Index.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AM_INIT_AUTOMAKE(1.13 dist-bzip2 foreign subdir-objects)
LT_PREREQ(2.4)
LT_INIT
AC_CONFIG_FILES([
  Makefile
])
AC_OUTPUT
首先,我必须找到当前的lua版本:

LUA_VERSION=$(pkg-config --modversion lua | awk -F "." '{print $1"."$2}')
在我的系统上:

  • pkg config——modversion lua返回5.3.1
  • awk-F“{print$1.”$2}”返回5.3
然后,线路:

libdir=$prefix/lib/lua/$LUA_VERSION/clangc
做所有的魔术

当我使用:

./autogen.sh --prefix=/usr
我的库安装在:

/usr/lib/lua/5.3/clangc