c - 在使用 Autotools 构建的 C 程序中定位数据文件

标签 c autotools

我有一个使用 Autotools 构建的 C 程序。在 src/Makefile.am 中,我定义了一个带有安装数据文件路径的宏:

AM_CPPFLAGS = -DAM_INSTALLDIR='"$(pkgdatadir)"'

问题是我需要运行 make install 才能测试二进制文件(因为它需要能够找到数据文件)。

我可以用源代码树的路径定义另一个宏,这样就可以在不安装的情况下定位数据文件:

AM_CPPFLAGS = -DAM_INSTALLDIR='"$(pkgdatadir)"' -DAM_TOPDIR='"$(abs_top_srcdir)"'

现在,我想要以下行为:

  1. 如果二进制文件是通过 make install 安装的,请使用 AM_INSTALLDIR 获取数据文件。
  2. 如果未安装二进制文件,请使用 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/

相关文章:

正确的格式说明符打印指针或地址?

autotools - 生成的 makefile 不断尝试编译不存在的文件

autotools - 如何安装到两个已安装的可执行文件之一的符号链接(symbolic link)?

makefile - 使用 autotools 仅构建一小部分项目

java - 如何在JNI代码中包含cspi/spi.h头文件?

c - 系统调用 open()

c - 使用 OpenCL 处理的大型阵列的错误信息

c - 使用堆栈中的问题

c++ - 使用自动工具检查预编译头文件?

makefile - 使用 GCC 和 autotools 为各个源文件设置编译标志的最佳方法是什么?