Autotools:包括一个预构建的第三方库
Autotools: Including a prebuilt 3rd party library
我目前正在努力将一组c++二进制文件升级为基于Autotools的更现代的东西,这些二进制文件每个都使用自己的Makefiles集。然而,我不知道如何包括第三方库(如。(Oracle即时客户端)到构建/打包过程中。
这真的是我错过的简单的东西吗?
编辑添加更多细节
我当前的构建环境如下所示:
/src
/lib
/libfoo
... source and header files
Makefile
/oci #Oracle Instant Client
... header and shared libraries
Makefile
/bin
/bar
... source and header files
Makefile
Makefile
/build
/bin
/lib
build.sh
现在顶层的build.sh执行以下步骤:
- 运行每个库的Makefile并将输出复制到/build/lib
- 运行每个二进制文件的Makefile并将输出复制到/build/bin
每个Makefile都有一组硬编码的路径到不同的兄弟目录。不用说,这已经变成了一场噩梦。我已经开始测试autotools,但我卡住的地方是找出等同于复制/src/lib/oci/*。因此,到/build/lib进行编译时链接并绑定到一个发行版。
我知道该怎么做了。
首先,我切换到非递归make。
接下来,我对configure做了以下更改。我按照这个页面http://www.openismus.com/documents/linux/using_libraries/using_libraries
AC_ARG_WITH([oci-include-path],
[AS_HELP_STRING([--with-oci-include-path],
[location of the oci headers, defaults to lib/oci])],
[OCI_CFLAGS="-$withval"],
[OCI_CFLAGS="-Ilib/oci"])
AC_SUBST([OCI_CFLAGS])
AC_ARG_WITH([oci-lib-path],
[AS_HELP_STRING([--with-oci-lib-path],
[location of the oci libraries, defaults to lib/oci])],
[OCI_LIBS="-L$withval -lclntsh -lnnz11"],
[OCI_LIBS='-L./lib/oci -lclntsh -lnnz11'])
AC_SUBST([OCI_LIBS])
在Makefile中。然后使用以下行(假设二进制文件名为foo)
foo_CPPFLAGS = $(OCI_CFLAGS)
foo_LDADD = libnavycommon.la $(OCI_LIBS)
ocidir = $(libdir)
oci_DATA = lib/oci/libclntsh.so.11.1
lib/oci/libnnz11.so
lib/oci/libocci.so.11.1
lib/oci/libociicus.so
lib/oci/libocijdbc11.so
autotools不是一个包管理系统,试图将这种类型的功能放入其中是一个坏主意。与其将第三方库合并到您的发行版中,不如让configure脚本检查其是否存在,如果所需的库不可用,则中止。用户有责任满足依赖项。然后,您可以发布一个二进制包,它将允许用户使用包管理系统来简化依赖项解析。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何在粒子(Spark)的本地构建中包含第三方库?
- 在Visual Studio 2019中构建简单的点云可视化代码时,来自PCL的第三方库的多个错误
- 如何使用 Bazel 构建包含 openssl 的第三方 c++ 库
- 为 c++ 构建一个静态库,该库在内部依赖于第三方库
- 解决第三方构建系统的分段故障
- 如何处理具有完全不同的构建系统的第三方库
- 如何使用主C ++程序构建与声音相关的库(不使用任何第三方库)
- 在现有Qt项目中从源代码构建第三方库
- Autotools:包括一个预构建的第三方库
- 在构建过程中构建第三方库
- 在Visual Studio 2015中进行跨平台构建时链接第三方库