我有一个使用 Autotools 构建的 C 程序。在 src/Makefile.am
中,我定义了一个带有安装数据文件路径的宏:
AM_CPPFLAGS = -DAM_INSTALLDIR='"$(pkgdatadir)"'
问题是我需要运行 make install
才能测试二进制文件(因为它需要能够找到数据文件)。
我可以用源代码树的路径定义另一个宏,这样就可以在不安装的情况下定位数据文件:
AM_CPPFLAGS = -DAM_INSTALLDIR='"$(pkgdatadir)"' -DAM_TOPDIR='"$(abs_top_srcdir)"'
现在,我想要以下行为:
- 如果二进制文件是通过
make install
安装的,请使用 AM_INSTALLDIR 获取数据文件。 - 如果未安装二进制文件,请使用 AM_TOPDIR 获取数据文件。
这可能吗?有没有更好的方法来解决这个问题?
最佳答案
我所做的(在 https://http://rhdunn.github.com/cainteoir/ 中)是:
const char *basedir = getenv("CAINTEOIR_DATADIR");
if (!basedir)
basedir = DATADIR "/" PACKAGE; // e.g. /usr/share/cainteoir-engine
然后运行它(在 tests/harness.py 中):
CAINTEOIR_DATADIR=`pwd`/data src/apps/metadata/metadata test_file.epub
然后,这允许用户根据需要更改获取数据的位置。
关于c - 在使用 Autotools 构建的 C 程序中定位数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6534713/