在使用GNU Autotools构建的项目中,我有一个需要由make
修改的脚本以包含安装路径。这是一个小例子:
configure.ac:
AC_INIT(foobar, 1.0)
AC_PREREQ(2.66)
AC_CONFIG_HEADERS(config.h)
AM_INIT_AUTOMAKE(foreign)
AC_CONFIG_FILES([Makefile blah/Makefile])
AC_OUTPUT
Makefile.am:
SUBDIRS = blah
嗒嗒/ Makefile.am:
all: myscript
myscript: myscript.in
sed -e 's,@datadir\@,$(pkgdatadir),g' myscript.in > myscript
chmod +x myscript
EXTRA_DIST = myscript.in
./configure; make
成功创建myscript
。同上make dist; tar xvzf foobar-1.0.tar.gz; cd foobar-1.0; ./configure; make
。但是,make distcheck
失败,因为文件myscript.in
丢失(但已成功复制make dist
)。
myscript.in
没有复制文件make distcheck
的原因?
答案 0 :(得分:7)
myscript.in在分发tarball中,但make distcheck执行了一个VPATH构建,其中configure从不同的目录运行。例如,它代替“./configure”,它做的事情类似于“mkdir build-dir; cd build-dir; / path / to / configure;”在Makefile.am中,您需要使用“$(srcdir)/myscript.in”替换myscript规则和依赖行中的“myscript.in”实例