在使用Autotools构建的C程序中查找数据文件

Leo*_*Leo 2 c autotools

我有一个使用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)

现在,我想要以下行为:

  1. 如果二进制文件是通过安装的make install,请使用AM_INSTALLDIR来获取数据文件.
  2. 如果未安装二进制文件,请使用AM_TOPDIR获取数据文件.

这可能吗?有没有更好的方法来解决这个问题?

ree*_*ece 5

我所做的(在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)

然后,这允许用户根据需要改变获取数据的位置.