产生“debian rules”文件时的apt-get环境变量

时间:2010-02-05 15:52:44

标签: linux ubuntu makefile debian apt-get

在Ubuntu下安装软件包期间由debian/rules生成的make(通常是apt-get)可用的环境变量是什么?

我特别关注与Gnome配置目录相关的环境变量。我想避免像~/.conf/apps/ ...这样的“硬编码”之类的东西,因为我被告知这些可能会像往常一样改变......

我一直在谷歌上搜索疯狂!

2 个答案:

答案 0 :(得分:1)

在包构建时(源代码或二进制包)调用

debian/rulesapt-get期间调用而不是

实际上,.deb文件(==二进制包)不再包含debian / rules的副本。该文件仅在源包中。

此外,软件包通常不应尝试为特定用户执行操作,也不应使用用户的配置。 Debian软件包适用于系统安装的软件。

虽然理论上可以制作一个在/ home中安装东西的个人包装,但这样的包装价值非常有限。

答案 1 :(得分:1)

您在寻找XDG_CONFIG_HOME和related吗?特别要注意的是XDG_CONFIG_HOME不一定存在,在这种情况下假定值为〜/ .config。

Python示例

import os
from os import path

app_name = "my_app"
home_config = path.join(
  os.environ.get("XDG_CONFIG_HOME") or path.expanduser("~/.config"),
  app_name,
)

print "User-specific config:", home_config

C ++示例

#include <cstdlib>
#include <iostream>
#include <stdexcept>
#include <string>

std::string get_home_config(std::string const& app_name) {
  // also look at boost's filesystem library
  using namespace std;
  string home_config;
  char const* xdg_config_home = getenv("XDG_CONFIG_HOME");
  if (xdg_config_home && xdg_config_home[0] != '\0') {
    home_config = xdg_config_home;
  }
  else {
    if (char const* home = getenv("HOME")) {
      home_config = home;
      home_config += "/.config";
    }
    else throw std::runtime_error("HOME not set");
  }
  home_config += "/";
  home_config += app_name;
  return home_config;
}

int main() try {
  std::cout << "User-specific config: " << get_home_config("my_app") << '\n';
  return 0;
}
catch (std::exception& e) {
  std::clog << e.what() << std::endl;
  return 1;
}