如何使用 automake 安装 D 库的 .d 文件?

Posted

技术标签:

【中文标题】如何使用 automake 安装 D 库的 .d 文件?【英文标题】:How to install .d files of a D library using automake? 【发布时间】:2019-01-28 19:11:09 【问题描述】:

使用Makefile.am 安装(系统范围)D 库(至少在 GNU 系统上)的正确方法是什么?

这是我安装静态库和共享库的代码:

install-data-local:
        install librdf_dlang.a librdf_dlang.so $(libdir)

剩下的问题是如何安装.d文件供开发者使用我的库?

特别是.d文件的安装目录应该是什么?

【问题讨论】:

【参考方案1】:

如果您正在系统范围内安装 D 库和源代码(我认为是接口文件),那么最常见的位置是 /usr/include/<project name>/usr/local/include/<project name>,只要它不与某些现有的 C/C++ 冲突在那里存储头文件的项目。一些 D 程序员也更喜欢/usr/include/d//usr/local/include/d/...

我举个例子,为此目的使用/usr/di(D 导入),我的库项目在那里有所有的接口文件。我将解释为什么我不喜欢在那里有单独的项目目录。

无论你选择什么目录,你都需要更新你的编译器搜索路径。

这是我的 dmd.conf 的一部分:

[Environment64]
DFLAGS=-I/usr/include/dmd/phobos -I/usr/include/dmd/druntime/import -I/usr/di -L-L/usr/lib64 -L--export-dynamic -fPIC

,ldc2.conf 看起来像:

    // default switches appended after all explicit command-line switches
    post-switches = [
        "-I/usr/include/d/ldc",
        "-I/usr/include/d",
        "-I/usr/di",
        "-L-L/usr/lib64",
    ];

如果您希望每个项目都有一个单独的目录,那么您最终会为每个项目使用-I<path>。 - 我真的不喜欢这种做法。但是,它在开发人员中非常流行,因此如何组织 D 导入文件完全取决于您。我知道有多少开发人员不喜欢 domain.product.packages 的 Java 方法,但这很适合所有 D 接口文件所在的单个位置,最重要的是,由于 domain/product 部分没有冲突。 ..

【讨论】:

【参考方案2】:

根据Filesystem Hierarchy Standard(例如这个SO question)

/usr/local/include

在“类 linux/unix 系统”上看起来是一个强有力的候选者。尤其看note 9:

从历史上看,严格按照标准,/usr/local 用于存储必须存储在本地主机上的数据(而不是 /usr,它可以通过网络挂载)。大多数时候 /usr/local 用于安装不属于标准操作系统发行版的软件/数据(在这种情况下,/usr 将只包含属于标准操作系统发行版的软件/数据)。 FHS 标准将来可能会更改以反映这一事实惯例。

我不知道 Windows。

【讨论】:

/include 不只适用于 C 头文件吗? 我查看了一些 Ubuntu D 软件包。他们使用include/d @porton /include 用于 include files 并且是语言中立的。 C 头文件只是一个(尽管是最常见的)示例。

以上是关于如何使用 automake 安装 D 库的 .d 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Automake 链接到共享库

如果库的实现未与 TS 项目集成,如何使用 d.ts 文件导出的 const 类型?

如何使用 automake 安装数据目录树

Automake:如何在不安装的情况下构建共享库

Python中turtle库的使用

autoconf/automake:基于库存在的条件编译?