我正在尝试创建Makefile.am
和configure.ac
但是当我输入make dist
或make distcheck
时,我会遇到错误
Makefile.am:
bin_PROGRAMS = neuromz
neuromz_SOURCES = neuromz.c neuromz.h ann.c ann.h
neuromz_CFLAGS = -lm
counfigure.ac:
AC_INIT([neuromz] , [1.0] , [mz32programmer@gmail.com])
AC_PREREQ([2.68])
AC_CONFIG_SRCDIR([neuromz.c])
AC_CONFIG_HEADERS([config.h])
#AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.11 -Wall -Werror])
AC_CONFIG_FILES([Makefile])
AC_SEARCH_LIBS([exp],[m])
AC_PROG_CC
AM_PROG_CC_C_O
AC_OUTPUT
我输入以下命令:
autoreconf -i
./configure
make distcheck
结果是:
mz@mz-32:~/programming/ctest/ANN$ make distcheck
make dist-gzip am__post_remove_distdir='@:'
make[1]: Entering directory '/home/mz/programming/ctest/ANN'
if test -d "neuromz--1.0 "; then find "neuromz--1.0 " -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "neuromz--1.0 " || { sleep 5 && rm -rf "neuromz--1.0 "; }; else :; fi
test -d "neuromz--1.0 " || mkdir "neuromz--1.0 "
test -n "" \
|| find "neuromz--1.0 " -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec /bin/bash /home/mz/programming/ctest/ANN/install-sh -c -m a+r {} {} \; \
|| chmod -R a+r "neuromz--1.0 "
tardir=neuromz--1.0 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >neuromz--1.0 .tar.gz
gzip: .tar.gz: No such file or directory
Makefile:528: recipe for target 'dist-gzip' failed
make[1]: *** [dist-gzip] Error 1
make[1]: Leaving directory '/home/mz/programming/ctest/ANN'
Makefile:563: recipe for target 'dist' failed
make: *** [dist] Error 2
什么是错误???
答案 0 :(得分:1)
问题在于:
AC_INIT([neuromz] , [1.0] , [mz32programmer@gmail.com])
请记住,Autoconf基本上是一个 text 处理器,空格字符是它处理的文本的一部分。引用[]
只是引用 - 而不是划分参数值。参数由参数列表中的逗号分隔。
Autoconf ignores leading whitespace in macro arguments,但不是尾随空格(尽管手册没有明确地调用后者)。这些特定参数中的尾随空格碰巧搞砸了分发tarball的构建规则。您可能会争辩说Automake应该在生成的Makefile中应用更仔细的引用,我不会反驳。但请注意,在这种情况下,这样做的结果可能不是您所期望或想要的。无论如何,只需从宏参数中删除尾随空格即可解决问题:
AC_INIT([neuromz], [1.0], [mz32programmer@gmail.com])