静态库和共享库的 Autotools 设置
Autotools Setup for Static and Shared Libraries
我们有一个庞大的代码库,我正在将其转换为 autotools 以帮助针对多个平台/配置。基本上,我们有:
|-- configure.ac
|-- Makefile.am
|-- dependency1
| `-- Makefile.am
|-- dependency2
| `-- Makefile.am
`-- dependency3
`-- Makefile.am
依赖文件夹在许多项目中是通用的,因此 Makefile.am
文件创建 libdependencyX.la
文件。在根 Makefile.am
中,然后我使用 LIBADD
组合所有内容以创建最终的共享库。这都是作品创造的。
我们需要创建库的共享版本和静态版本。我该怎么做?所有依赖项都只使用 LTLIBRARIES
来制作所有内容。
最初的解决方案只是一个巨大的 Makefile,它创建了一系列 .o
文件,然后最终构建生成的 .so
或 .a
。
更新2015-03-11
我遇到的问题是我可以获取静态或共享,但不能同时获取两者。最终库的根 Makefile.am
看起来像这样。
lib_LTLIBRARIES = libroot.la
libroot_la_SOURCES = root.c
libroot_la_LIBADD = dependency1/libdependency1.la \
dependency2/libdependency2.la \
dependency3/libdependency3.la
libroot_la_LDFLAGS = -shared
将 -shared
切换为 -static
会得到 .a
,但如何才能同时获得两者? --enable-shared / --enable-static
似乎没有任何改变。
我的问题似乎与 libretto_la_LDFLAGS
行有关。忽略它并使用 make install
以指定的前缀给出 .a 和 .so 文件。
我们有一个庞大的代码库,我正在将其转换为 autotools 以帮助针对多个平台/配置。基本上,我们有:
|-- configure.ac
|-- Makefile.am
|-- dependency1
| `-- Makefile.am
|-- dependency2
| `-- Makefile.am
`-- dependency3
`-- Makefile.am
依赖文件夹在许多项目中是通用的,因此 Makefile.am
文件创建 libdependencyX.la
文件。在根 Makefile.am
中,然后我使用 LIBADD
组合所有内容以创建最终的共享库。这都是作品创造的。
我们需要创建库的共享版本和静态版本。我该怎么做?所有依赖项都只使用 LTLIBRARIES
来制作所有内容。
最初的解决方案只是一个巨大的 Makefile,它创建了一系列 .o
文件,然后最终构建生成的 .so
或 .a
。
更新2015-03-11
我遇到的问题是我可以获取静态或共享,但不能同时获取两者。最终库的根 Makefile.am
看起来像这样。
lib_LTLIBRARIES = libroot.la
libroot_la_SOURCES = root.c
libroot_la_LIBADD = dependency1/libdependency1.la \
dependency2/libdependency2.la \
dependency3/libdependency3.la
libroot_la_LDFLAGS = -shared
将 -shared
切换为 -static
会得到 .a
,但如何才能同时获得两者? --enable-shared / --enable-static
似乎没有任何改变。
我的问题似乎与 libretto_la_LDFLAGS
行有关。忽略它并使用 make install
以指定的前缀给出 .a 和 .so 文件。