Autotools - 需要一个例子
Autotools - An example required
我希望就基于 automake 的良好实践、工具包构建(编译)过程获得一些帮助。我正在编写一个工具包,其中包含几个外部库和几个内部库以及演示工具。直到现在我都在做我自己的 makefile 脚本来编译它,但现在我想切换到 autotools,也就是说我想从我的 wanky 脚本转移到更标准化的东西。所以我正在寻找的是一些帮助,一个我可以研究的最小例子。此最小示例应符合 "good practice" 原则并保留以下树结构:
toolkit/src/libint/
libinternal.cpp libinternal.hpp
toolkit/src/libext/
externallib/
toolkit/bin/
my binaries
toolkit/demo/tool1/
tool1.cpp tool1.hpp
toolkit/demo/tool2/
tool2.cpp tool2.hpp
toolkit/lib/
libinternal.a libexternal.a
toolkit/include/libint/
libinternal.hpp
toolkit/include/libext/
libexternal.hpp
通常,我的演示工具位于单独的子文件夹下的演示文件夹中,这些子文件夹是使用 headers 编译的,以及来自 include 和 lib 文件夹的库。这意味着在我的 makefile 中,我通常首先将库编译到 include 和 lib 文件夹中,然后在构建工具包时演示工具。
任何人都可以为上述树源结构提供所需的 configure.ac 和 Makefile.am 文件的最小示例(欢迎提供有关源树的任何建议)
谢谢你
第一个问题是您的库是独立安装还是链接到二进制文件——一个方便的库——。
在这两种情况下,您都需要使用 autoconf、automake 和 libtool。我将忽略 configure.ac 文件并关注 Makefile.am。该目录应如下所示:
./
lib/
Makefile.am
...
bin/
...
Makefile.am
在顶部 Makefile.am 你应该有这个:
$ cat Makefile.am
SUBDIRS = . lib # note the "." which means that the current directory is executed first
在库中Makefile.am
$ cat lib/Makefile.am
noinst_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm
如果您希望独立安装库,只需将 noinst
替换为 lib
所以库 Makefile.am 看起来像:
$ cat lib/Makefile.am
lib_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm
我希望就基于 automake 的良好实践、工具包构建(编译)过程获得一些帮助。我正在编写一个工具包,其中包含几个外部库和几个内部库以及演示工具。直到现在我都在做我自己的 makefile 脚本来编译它,但现在我想切换到 autotools,也就是说我想从我的 wanky 脚本转移到更标准化的东西。所以我正在寻找的是一些帮助,一个我可以研究的最小例子。此最小示例应符合 "good practice" 原则并保留以下树结构:
toolkit/src/libint/
libinternal.cpp libinternal.hpp
toolkit/src/libext/
externallib/
toolkit/bin/
my binaries
toolkit/demo/tool1/
tool1.cpp tool1.hpp
toolkit/demo/tool2/
tool2.cpp tool2.hpp
toolkit/lib/
libinternal.a libexternal.a
toolkit/include/libint/
libinternal.hpp
toolkit/include/libext/
libexternal.hpp
通常,我的演示工具位于单独的子文件夹下的演示文件夹中,这些子文件夹是使用 headers 编译的,以及来自 include 和 lib 文件夹的库。这意味着在我的 makefile 中,我通常首先将库编译到 include 和 lib 文件夹中,然后在构建工具包时演示工具。
任何人都可以为上述树源结构提供所需的 configure.ac 和 Makefile.am 文件的最小示例(欢迎提供有关源树的任何建议)
谢谢你
第一个问题是您的库是独立安装还是链接到二进制文件——一个方便的库——。
在这两种情况下,您都需要使用 autoconf、automake 和 libtool。我将忽略 configure.ac 文件并关注 Makefile.am。该目录应如下所示:
./
lib/
Makefile.am
...
bin/
...
Makefile.am
在顶部 Makefile.am 你应该有这个:
$ cat Makefile.am
SUBDIRS = . lib # note the "." which means that the current directory is executed first
在库中Makefile.am
$ cat lib/Makefile.am
noinst_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm
如果您希望独立安装库,只需将 noinst
替换为 lib
所以库 Makefile.am 看起来像:
$ cat lib/Makefile.am
lib_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm