我有一个使用Autotools构建的C程序.在src/Makefile.am,我定义一个宏与安装数据文件的路径:
AM_CPPFLAGS = -DAM_INSTALLDIR='"$(pkgdatadir)"'
Run Code Online (Sandbox Code Playgroud)
问题是我需要先运行make install才能测试二进制文件(因为它需要能够找到数据文件).
我可以使用源树的路径定义另一个宏,以便可以定位数据文件而无需安装:
AM_CPPFLAGS = -DAM_INSTALLDIR='"$(pkgdatadir)"' -DAM_TOPDIR='"$(abs_top_srcdir)"'
Run Code Online (Sandbox Code Playgroud)
现在,我想要以下行为:
make install,请使用AM_INSTALLDIR来获取数据文件.这可能吗?有没有更好的方法来解决这个问题?
我所做的(在https:// http://rhdunn.github.com/cainteoir/中)是:
const char *basedir = getenv("CAINTEOIR_DATADIR");
if (!basedir)
basedir = DATADIR "/" PACKAGE; // e.g. /usr/share/cainteoir-engine
Run Code Online (Sandbox Code Playgroud)
然后运行它(在tests/harness.py中):
CAINTEOIR_DATADIR=`pwd`/data src/apps/metadata/metadata test_file.epub
Run Code Online (Sandbox Code Playgroud)
然后,这允许用户根据需要改变获取数据的位置.