我知道当我从源代码安装Linux应用程序时,我执行./configure --sysconfdir=/etc,然后这个应用程序的conf文件(如httpd.conf)将转到/etc.
但是从源代码的角度来看,源代码/etc在解析时如何知道conf文件.我的意思是代码就像fopen("/../../app.conf", "r");在我们安装之前确定的那样,配置文件会改变源代码还是存在其他一些机制?
该configure脚本将生成必要的Makefile,它将使用C编译器的-DMACRO=content功能基本上将C预处理程序#define MACRO content语句注入编译单元.因此,sysconfdir可以通过Make规则使用:
foo.o: foo.c
$(CC) -DCONFDIR=$(sysconfdir) -o $@ $<
Run Code Online (Sandbox Code Playgroud)
(这表示foo.o在foo.c更新时构建目标文件;要构建它,使用$(CC)变量运行C编译器,CONFDIR使用$(sysconfdir)(通过./configure脚本提供)的内容定义,将输出放入目标文件($@)并提供源文件($<)作为编译器的唯一输入.))
然后C代码foo.c可以像这样使用它:
FILE *conf;
if (conf = fopen(CONFDIR "/foo", "r")) {
/* read config file */
} else {
/* unable to open config, either error and die or supply defaults */
}
Run Code Online (Sandbox Code Playgroud)
注意在编译程序之前执行C 字符串连接 - 超级方便了这种用法.
更多细节:http://www.gnu.org/software/hello/manual/autoconf/Installation-Directory-Variables.html#Installation-Directory-Variables
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |