C++ 自动工具-所需示例
我希望能得到一些关于基于汽车制造的良好实践、工具包构建(编译)过程的帮助。我正在编写一个工具包,它由几个外部库和几个内部库以及演示工具组成。到目前为止,我一直在编写自己的makefile脚本来编译它,但现在我想切换到autotools,也就是说,我想从我的拙劣脚本转移到更标准化的脚本。所以我在寻找一些帮助,一个我可以学习的最起码的例子。此最低示例应符合“良好实践”原则,并保留以下树结构:C++ 自动工具-所需示例,c++,autotools,autoconf,automake,C++,Autotools,Autoconf,Automake,我希望能得到一些关于基于汽车制造的良好实践、工具包构建(编译)过程的帮助。我正在编写一个工具包,它由几个外部库和几个内部库以及演示工具组成。到目前为止,我一直在编写自己的makefile脚本来编译它,但现在我想切换到autotools,也就是说,我想从我的拙劣脚本转移到更标准化的脚本。所以我在寻找一些帮助,一个我可以学习的最起码的例子。此最低示例应符合“良好实践”原则,并保留以下树结构: toolkit/src/libint/ libinternal.cpp libinternal.h
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
通常,我的演示工具位于单独的子文件夹下的demo文件夹中,这些子文件夹使用include和lib文件夹中的标题和库进行编译。这意味着在我的makefile中,我通常首先将库编译到include和lib文件夹中,然后在构建工具包时将其编译为演示工具
是否有人能为上述树源结构提供所需的configure.ac和Makefile.am文件的最简单示例(欢迎对源代码树提出任何建议)
谢谢第一个决定是您的库是独立安装还是链接到二进制文件(一个方便的库) 在这两种情况下,您都需要使用autoconf、automake和libtool。我将忽略configure.ac文件,并将焦点放在Makefile.am中。目录应如下所示:
./
lib/
Makefile.am
...
bin/
...
Makefile.am
$ cat lib/Makefile.am
lib_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm
在top Makefile.am中,您应该具有以下内容:
$ cat Makefile.am
SUBDIRS = . lib # note the "." which means that the current directory is executed first
在lib Makefile.am中
$ cat lib/Makefile.am
noinst_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm
如果希望独立安装库,只需将noinst
替换为lib
因此lib Makefile.am将如下所示:
./
lib/
Makefile.am
...
bin/
...
Makefile.am
$ cat lib/Makefile.am
lib_LTLIBRARIES = libexternal.a
libexternal_a_SOURCES = source.c source.h
libexternal_a_LIBADD = -lm
什么是
libext/externallib/
?如果它是外部的,为什么在lib/
中需要一个副本?自动工具使用构建目录,目标是在指定的目录中安装库、头和程序:/configure--help
我只是想更好地了解外部依赖项与您希望安装的内容。i、 例如,您可能不希望安装演示-仅用于测试等。不幸的是,autotools学习曲线非常陡峭;同时,这可能是我见过的最好的教程。外部依赖项是不属于系统的库,有些是不稳定的(旧库),如果移动到不同的操作系统,需要编译这些库。这就是为什么我有externallib/directory。但是,如果这使事情复杂化,而且因为我正在寻找一个学习的例子,这可以忽略不计。也许可以提供一个boost示例。非常感谢。