【发布时间】:2014-11-10 22:11:05
【问题描述】:
大多数构建系统,如autoconf/automake,允许用户指定目标目录来安装运行程序所需的各种文件。通常这包括二进制文件、配置文件、辅助脚本等。
同时,许多可执行文件通常需要从配置文件中读取,以允许用户修改运行时设置。
最终,程序(比如说,编译后的 C 或 C++ 程序)需要知道去哪里才能读取配置文件。很多时候我会将路径硬编码为/etc/MYPROGAM/myprog.conf 之类的东西,这当然不是一个好主意。
但在 autoconf 世界中,用户可能会指定安装前缀,这意味着 C/C++ 代码需要以某种方式意识到这一点。
一种解决方案是指定一个带有 .in 前缀的 C 头文件,它仅用于定义配置文件的位置,例如:
const char* config_file_path = "@CONFIG_FILE_PATH@"; // `CONFIG_FILE_PATH` is defined in `configure.ac`.
这个文件将被命名为constants.h.in,它必须由configure.ac文件处理以输出一个实际的头文件,然后可以包含在任何.c或.cpp文件中需要它.
这是处理这类事情的通常方式吗?好像有点麻烦,不知道有没有更好的解决办法。
【问题讨论】:
-
这对我来说当然是一种合理的处理方式。虽然如果用户运行
make install prefix=/some/other/path而不是./configure --prefix=/some/other/path将无济于事,但我不确定这是否“应该”在一般情况下工作。