【问题标题】:Locating etc and share directories on Linux在 Linux 上定位 etc 和共享目录
【发布时间】:2010-08-02 17:04:08
【问题描述】:

我正在用 C++ 为 Linux 编写一个程序,我需要存储一些额外的数据,例如图像。类似的东西通常在 Linux 上的 /usr/share 中。

用户可以决定在哪里安装软件(我正在使用 CMake),因此我应该使用 /usr/share、/usr/local/share、/home/theuser/somefolder/share 或其他,具体取决于他安装它的地方。

我通常通过找出二进制文件的绝对路径、从路径中删除尾随的“bin”并将其替换为“share”来实现这一点。然而,这很麻烦,而且不是最不优雅的,所以我想知道其他人是怎么做到的。我正在使用 boost,但我找不到任何相应的功能。

我只需要这个项目的共享目录,但我也对你如何使用 etc 目录感兴趣(我的方法在那里不太适用,因为二进制文件可以在 /usr/bin 中,而配置文件在 /etc)

【问题讨论】:

  • 无论你的算法有多好,它都不会在 100% 的安装中起作用。所以给用户一种手动指定目录的方法,比如命令行参数或者环境变量。

标签: c++ linux boost


【解决方案1】:

构建系统应在构建过程中传递所需的安装位置作为定义。所以

gcc -DDATA_DIR=/custom/build/location ...

这意味着在构建代码后无法更改安装位置,但这是确定代码知道在哪里查找的唯一方法,而无需在运行时某处读取该信息。

【讨论】:

  • 应该是-D\"DATA_DIR=/custom/build/location\"
  • 嗯,这听起来不太灵活,但我想我以前在某个地方看到过。这么多年过去了,我有点惊讶于这样的事情没有可行的方法。
【解决方案2】:

你可以使用default directories paths

【讨论】:

  • 我愿意,/usr/share 和 /usr/local/share 都是默认的。但如果构建系统允许,我不想从用户那里指定他自己的路径。
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多