如何使用GNU Autotools配置源文件目录和安装位置



我想要一个这样的项目目录:

<>以前app/|src/Makefile 之前

所有.cpp和.hpp, .h文件都在src子目录中。如何配置Makefile.amconfigure.ac,使生成的Makefile使用目录/src作为源目录?以及如何让生成的可执行文件进入指定的目录,如/usr/opt ?

另一个问题是,如果我想让我的程序作为一个。so库,如何实现我的目标,使其安装到/usr/lib/usr/local/lib ?如何使头文件像/usr/local/include/app ?

通常,您只需添加

<>之前SUBDIRS = src之前

到顶层的Makefile。在AC_CONFIG_FILES中提到src/Makefile。对递归make有一些合理的抱怨,但如果所有的源代码都在src中,那么make中的单级递归就不是真正的问题。将可执行文件放入/usr/opt中是用户在配置时设置prefix时完成的,在构建包时不应该考虑这个问题。要构建可执行文件,请在Makefile中使用bin_PROGRAMS。要构建一个库,您应该使用lib_LIBRARIES或lib_LTLIBRARIES(就个人而言,我倾向于使用libtool并使用后者)。

我认为你关于安装在/usr/lib或/usr/opt的问题表明了一个根本性的误解。在构建包时,您完全不关心这个问题。作为包的维护者,您指出程序应该安装在$(prefix)/bin(或$exec_prefix/bin,或$bindir)中,库应该安装在$libdir中,但是用户在运行configure时确定$prefix、$libdir和$bindir的位置。(通常,人们只设置前缀,bindr默认为$prefix/bin,而libdir默认为$prefix/lib)

通常对于可执行文件,您将使用如下格式:

bin_PROGRAMS = foo
foo_SOURCES = $(top_srcdir)/src/foo_main.c 
$(top_srcdir)/src/foo_main.h 
$(top_srcdir)/src/something_else.c

这将安装在前缀目录的/bin目录中,虽然这不是你想要的,但它是你用户所期望的。

要做你想做的,你需要这样做:

 myexedir = $(prefix)/opt
 myexe_PROGRAMS = foo
 foo_SOURCES = ...

其中foo_SOURCES和上面一样。

对于库,它只是:

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = ...

,它将安装在前缀目录的/lib目录中。设置lib安装的位置不是由您(直接)决定的,而是由调用configure:

的人决定的。
./configure --prefix=/usr

将使lib安装(当make install被调用时)在/usr/lib

./configure

./configure --prefix=/usr/local

将使lib安装在/usr/local/lib中。

将autoconf和automake文件配置。acMakefile。Am 在"src"目录下,并在文档中写明"。/configure"命令应该在那里运行,而不是在顶层目录中运行?否则你无法避免在顶层设置autoconf/automake文件

最新更新