autotools - 如何使用 autotools 构建系统完全包含另一个项目?
问题描述
我的项目依赖于 C 中的第三方库(-ies),它本身有一个基于自动工具的独立构建系统。
我想在源代码树中拥有一个第三方库的副本,并为我的项目编写基于自动工具的通用构建系统,这样我就可以拥有一个配置和所有常用的自动工具捆绑来完成一个完整的一次性构建。
该系统会以某种方式首先构建第三方库(使用第三方的 configure.ac 等,就好像它是独立构建的一样),然后编译并将我的所有源与第三方库链接(我愿意只是静态链接我的程序到第三方库,而不是在系统位置的任何地方安装第三方库/usr/local
等)。
所以我假设一个项目的目录结构如下:
project/
src/
folder_with_my_source_code/
third-party/
third-party-lib-1/
src/
Makefile.am // native lib-1 files, prefer to keep unmodified
configure.ac // native lib-1 files, prefer to keep unmodified
third-party-lib-2/
src/
Makefile.am // native lib-2 files, prefer to keep unmodified
configure.ac // native lib-2 files, prefer to keep unmodified
Makefile.am // do I need this at all ?
Makefile.am //this should describe how to build my files
Makefile.am // project's root makefile
configure.ac // this, probably, should somehow include instructions on how to build lib-1 and lib-2 with their supplied configure.ac's ?
如何创建这种类似链的依赖构建?
解决方案
您可以使用AC_CONFIG_SUBDIRS
:
在大多数情况下,调用
AC_OUTPUT
足以在子目录中生成 makefile。但是,configure
控制多个独立包的脚本可以AC_CONFIG_SUBDIRS
用来运行configure
子目录中其他包的脚本。— 宏:AC_CONFIG_SUBDIRS ( dir ...)
在给定的空白或换行符分隔列表中的每个子目录dirAC_OUTPUT
中运行。configure
推荐阅读
- c# - 将 HTML 列表的值传递给 EditorFor 方法或直接传递给控制器
- .net - ag-grid:.net/c# 的数据模型
- azure - Azure databricks DBFS 挂载不可见
- azure-devops - 通过 CI-CD 管道部署 webjobs
- knockout.js - 淘汰赛动态加载子树
- reactjs - 未捕获的类型错误:调用 createStore 时 Object(...) 不是函数
- html - SVG 文本的内联大小未在 Chrome(v76) 或 Firefox(v69) 中包装内容
- html - 子元素和兄弟元素中的 Z-index 问题
- java - 如何从随机字符串消息中仅提取 6 位数字?6位数字不在消息的开头或结尾
- ansible - Ansible PlayBook 运行 SQL 脚本文件