如何在二进制版本中提供资源文件的路径?

How can I provide paths to resource files in a binary release?

我是一个库的维护者,该库与 .xsd 文件捆绑在一起用于 XML 验证。目前,用户需要通过设置环境变量来告诉库这些文件所在的位置。我希望能够在该位置编译,因为忘记设置环境变量是一个常见问题。

如果您从源代码构建库,我可以这样做。由于构建系统 (CMake) 知道安装路径,它可以设置一个预处理器定义指向 XSD 文件所在的目录。

在分发预编译版本时,这是行不通的,因为构建服务器上的路径不会与用户的一致。

安装目录结构如下:

<install_dir>
    - conf/
      - foo.xsd
      - bar.xsd
    - lib/
      - mylib.a

如何在不使用特定于构建服务器的绝对路径的情况下告诉 mylib.a foo.xsd 所在的位置?

我假设您知道安装后文件的相对布局(您应该)。

在运行时获取可执行文件的绝对路径(所有操作系统都有这样做的方法)。

然后使用您对文件相对安装位置的了解,构造一个相对于可执行文件的资源文件路径。

现在使用您构建的路径加载资源。