2011-06-22 95 views
2

在使用GNU Autotools构建的项目中,我有一个脚本,需要修改make以包含安装路径。这里有一个小例子:由`make dist`复制而不是`make distcheck`的文件

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

回答

7

myscript.in位于分发tarball中,但是使distcheck执行VPATH构建,其中configure从另一个目录运行。例如,而不是“./configure”,它正在做类似于“mkdir build-dir; cd build-dir;/path/to/configure;”的操作。在Makefile.am中,需要将myscript规则和依赖行中的“myscript.in”实例替换为“$(srcdir)/myscript.in”

+0

非常好,非常感谢! – Leo