Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动工具-所需示例_C++_Autotools_Autoconf_Automake - Fatal编程技术网

C++ 自动工具-所需示例

C++ 自动工具-所需示例,c++,autotools,autoconf,automake,C++,Autotools,Autoconf,Automake,我希望能得到一些关于基于汽车制造的良好实践、工具包构建(编译)过程的帮助。我正在编写一个工具包,它由几个外部库和几个内部库以及演示工具组成。到目前为止,我一直在编写自己的makefile脚本来编译它,但现在我想切换到autotools,也就是说,我想从我的拙劣脚本转移到更标准化的脚本。所以我在寻找一些帮助,一个我可以学习的最起码的例子。此最低示例应符合“良好实践”原则,并保留以下树结构: toolkit/src/libint/ libinternal.cpp libinternal.h

我希望能得到一些关于基于汽车制造的良好实践、工具包构建(编译)过程的帮助。我正在编写一个工具包,它由几个外部库和几个内部库以及演示工具组成。到目前为止,我一直在编写自己的makefile脚本来编译它,但现在我想切换到autotools,也就是说,我想从我的拙劣脚本转移到更标准化的脚本。所以我在寻找一些帮助,一个我可以学习的最起码的例子。此最低示例应符合“良好实践”原则,并保留以下树结构:

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示例。非常感谢。