Build autotools/cmake高级使用wrt静态链接与动态链接

Build autotools/cmake高级使用wrt静态链接与动态链接,build,cmake,autotools,libtool,Build,Cmake,Autotools,Libtool,我有一个比较先进的自我维护构建系统 我有兴趣改用自动工具或cmake 警告是获取特性奇偶校验的“稍微高级”部分 这是我关心的问题 默认情况下,我们构建静态和动态的“库”,并安装它们。 在查找要链接到的库时,我们首先搜索动态库,然后搜索静态库 然而,我们有一个有用的旋钮称为build_standalone 它有两个功能: -对于库,它只构建静态库 有点像libtool的“便利库”,但它们确实可以安装 对于导入(从库和程序),它首先搜索静态 库(它总是为我们构建的东西而存在,但可能不是为我们没有的

我有一个比较先进的自我维护构建系统 我有兴趣改用自动工具或cmake

警告是获取特性奇偶校验的“稍微高级”部分

这是我关心的问题

默认情况下,我们构建静态和动态的“库”,并安装它们。 在查找要链接到的库时,我们首先搜索动态库,然后搜索静态库

然而,我们有一个有用的旋钮称为build_standalone

它有两个功能:
-对于库,它只构建静态库 有点像libtool的“便利库”,但它们确实可以安装

  • 对于导入(从库和程序),它首先搜索静态 库(它总是为我们构建的东西而存在,但可能不是为我们没有的东西而存在)

    导入程序无法精确指定应静态链接哪些库, 但我们对此没有意见

    在这方面是否可以与libtool或cmake实现对等?
    怎么做

谢谢,, -Jay

关于创建静态库和共享库,这可以在
configure.ac中轻松完成:

...
LT_INIT
...
默认情况下启用共享库,如果静态库与共享库不冲突,则启用静态库

至于链接到静态库和共享库(当两者都存在时),您必须向
Makefile.am
添加必要的注释。例如,如果你有

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.c foo.h
bin_PROGRAMS = bar qux
bar_SOURCES = bar.c
qux_SOURCES = qux.c
你想

  • 动态链接
    bar
    libfoo
  • 静态链接
    qux
    libfoo
然后你可以:

bar_LDADD = libfoo.la
qux_LDADD = libfoo.la
qux_LDFLAGS = -static

乍一看,我想说这两种构建系统都是可能的。您必须遵循构建系统的理念。通常,您必须调整构建系统处理问题的方式。否则你就有笨拙的变通办法。顺便说一句,我现在不会把一个项目移植到Autotools。它的开发正在停滞,他们很难找到工具的维护人员。@usr1234567,很抱歉回复太晚;作为一个在自动工具上投入了一点时间的人,听到这个消息我很难过,但技术就是这样发展的。你认为什么样的技术会取代它呢?有一件事我不清楚,那就是构建系统只编译一次所有的东西——PIC——然后从中生成静态存档——当然还有动态存档。所以。许多系统想要进行的双重编译对我来说是非常不愉快和不必要的,这是一个可能的轻微优化的双重构建时间。@JayK,我很困惑。上述解决方案是否会导致系统上的双重编译?在我的系统上,每个源文件只编译一次。