我的程序需要在运行时加载一些文件,这些文件将安装到指定的任何文件夹中./configure --datadir=/somewhere
由于我的程序需要在运行时知道该文件夹的位置,因此我需要在某处 #define 一个符号,以便 C 代码可以以字符串形式访问该路径。
我目前正在通过修改编译器标志来做到这一点:
AM_CPPFLAGS = -DDATA_PATH=\"$(pkgdatadir)\"
然而,由于配置脚本已经生成了一个 config.h 文件,其中包含许多其他内容,因此我希望该符号出现在其中。
那可能吗?
您的答案是首选的做法。 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).
自动工具和一般的构建系统是一项复杂的业务,还没有人想出很好、简洁的方法来完成足够通用的事情,这意味着我们必须阅读像这样的部分并充分解决它。无论如何,你的直觉是正确的!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)