我的程序需要在运行时加载一些文件,这些文件将被安装到任何给定的文件夹中 ./configure --datadir=/somewhere
由于我的程序需要知道此文件夹在运行时的位置,我需要在某处#define一个符号,以便C代码可以作为字符串访问路径.
我目前通过修改编译器标志来做到这一点:
AM_CPPFLAGS = -DDATA_PATH=\"$(pkgdatadir)\"
Run Code Online (Sandbox Code Playgroud)
但是,由于配置脚本已经生成了一个包含其他内容的config.h文件,我希望将符号显示在那里.
那可能吗?
您的解决方案是正确的.Autoconf/Automake之所以不(轻松)支持安装路径的原因config.h
是理论上你应该能够在构建时覆盖路径,比如make prefix=/else/where
.这种可能性现在有些神秘,但这就是原因.(请注意,这是不同的make install prefix=/else/where/
,尽管如此,它仍然有用DESTDIR
.)
你的答案是首选方式.autoconf手册解释了如何在"make install"时覆盖各种变量(例如,这对包装非常有用).这样做(在"安装目录变量"部分中):
A corollary is that you should not use these variables except in
makefiles. For instance, instead of trying to evaluate `datadir' in
`configure' and hard-coding it in makefiles using e.g.,
`AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])', you
should add `-DDATADIR='$(datadir)'' to your makefile's definition of
`CPPFLAGS' (`AM_CPPFLAGS' if you are also using Automake).
Run Code Online (Sandbox Code Playgroud)
autotools和一般的构建系统是一个令人费解的事业,没有人能够提出一些很好的方法来做一般的事情,这意味着我们必须阅读像这样的部分并完全解决.无论如何,你的直觉是正确的!
AC_DEFINE_UNQUOTED([DATA_PATH], ["$pkgdatadir"])
Run Code Online (Sandbox Code Playgroud)
虽然修改编译器标志实际上是更常用的方法.
归档时间: |
|
查看次数: |
3106 次 |
最近记录: |