2011-06-22 94 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