gpt4 book ai didi

c++ - Autotools:包括预建的第 3 方库

转载 作者:行者123 更新时间:2023-11-30 04:30:42 29 4
gpt4 key购买 nike

我目前正在努力将一组 C++ 二进制文件升级为基于 Autotools 的更现代的东西,每个文件都使用自己的 Makefile 集。但是我不知道如何将第三方库(例如 Oracle Instant Client)包含到构建/打包过程中。

这是我错过的非常简单的事情吗?

编辑以添加更多细节

我当前的构建环境如下所示:

/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 执行以下步骤:

  1. 运行每个库的 Makefile 并将输出复制到/build/lib
  2. 运行每个二进制文件的 Makefile 并将输出复制到/build/bin

每个 Makefile 都有一组指向各个同级目录的硬编码路径。不用说,这已成为维护的噩梦。我已经开始测试 autotools,但我被卡住的地方是弄清楚等同于将/src/lib/oci/*.so 复制到/build/lib 以进行编译时链接和捆绑到分发中。

最佳答案

我想出了如何实现这一点。

首先我切换到非递归 make。

接下来,我根据此页面 http://www.openismus.com/documents/linux/using_libraries/using_libraries 对 configure.am 进行了以下更改

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.am 中使用以下行(假设一个名为 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

关于c++ - Autotools:包括预建的第 3 方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526065/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com