【发布时间】:2015-03-14 11:51:17
【问题描述】:
我正在使用 c 来构建一些针对 allegro 的代码,并使用 自动工具来处理构建系统。问题是代码正在尝试 拉入位图,我不确定如何正确处理 使用自动工具。
我的项目布局:
allegro-learning/
Makefile.am
README
configure.ac
src/
stargate.c
stargate.bmp
stargate.c 中的代码通过以下方式拉入位图:
stargate = load_bitmap("stargate.bmp", NULL);
allegro-learning/configure.ac 的内容:
AC_PREREQ([2.69])
AC_INIT([allegro-learning], [1.0], [itsjustme@gmail.com])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
AM_PROG_CC_C_O
PKG_CHECK_MODULES([ALLEGRO], [allegro >= 4.2.3])
AC_CHECK_HEADERS([stdio.h])
AC_CONFIG_FILES([Makefile
src/Makefile])
AC_OUTPUT
allegro-learning/Makefile.am的内容:
SUBDIRS = src
dist_doc_DATA = README
allegro-learning/src/Makefile.am的内容:
bin_PROGRAMS = stargate
stargate_SOURCES = stargate.c
stargate_CFLAGS = $(ALLEGRO_CFLAGS)
stargate_LDFLAGS = $(ALLEGRO_LIBS)
当我使用自动工具构建和安装时:
# autoreconf --install
# ./configure --prefix=$HOME/usr
# make
# make install
并运行生成的星际之门可执行文件中的所有段错误。破解它 open with GDB 显示失败在我上面突出显示的行(来自stargate.c),它引入了stargate.bmp。
但是,当我只是去 allegro-learning/src 并构建 直接不使用自动工具:
# cd allegro-learning/src
# gcc `pkg-config allegro --cflags --libs` -o stargate stargate.c
运行可执行文件工作正常。这让我相信我没有使用自动工具正确设置项目来安装位图,因此可执行文件可以在安装后找到它们。
这样做的正确方法是什么?
我已经咨询了Autotools,看起来在使用带有 java 的 autotools 时安装 jar 是一个类似的问题,你有 .jar 文件,这些文件也必须安装并且可供执行代码查看。但是他的例子被嵌入到一个更大的项目中,这让我感到困惑。
我还查看了Data Files With Automake,但我仍然不确定应该如何修改我的项目,以便生成的可执行文件可以找到位图。事实是我不确定 stargate.bmp 是否符合 autotools 世界中的“数据文件”的条件。也许有一种完全不同的方式来处理这种情况?
有关如何处理此类情况的任何具体指导都是 非常感谢。
【问题讨论】:
标签: c autotools autoconf automake allegro