使 distcheck 权限被拒绝

make distcheck permission denied

在我的 src 目录中,我有接口文件 neoleo.i,swig 使用该文件通过规则创建 neoleo_wrap.c

neoleo_wrap.c : $(srcdir)/neoleo.i neoleo_swig.c neoleo_swig.h
        swig -tcl8 $(srcdir)/neoleo.i

当我键入 make dist ; make distcheck 时,它输出:

swig -tcl8 ../../../src/neoleo.i
Unable to open file ../../../src/neoleo_wrap.c: Permission denied
make[2]: *** [Makefile:1313: neoleo_wrap.c] Error 1

我需要做什么来解决这个问题?

我的Makefile.am的一些相关部分:

EXTRA_DIST = $(srcdir)/neoleo.i
BUILT_SOURCES = getdate.c parse.c parse.h posixtm.c posixtm.h neoleo_wrap.c
nodist_libneoleo_la_SOURCES = neoleo_wrap.c
neoleo_wrap.c : $(srcdir)/neoleo.i neoleo_swig.c neoleo_swig.h
        swig -tcl8 $(srcdir)/neoleo.i

完整 Makefile.am 可在此处获取:

Makefile.am

automake distcheck 验证您的构建系统是否根据其标准正确运行,其中一部分是源目录未以任何方式修改。 distcheck 使用权限来确保这一点。在您的情况下,swig 试图将其输出文件写入不正确的源目录(根据 automake):不得修改该目录。

即使您不关心这个,您的 makefile 也是错误的,因为它说您的规则将构建 neoleo_wrap.c,但您的 swig 命令行实际上会创建 ../../src/neoleo_wrap.c ; make 不会原谅这种背叛。

因此,您需要将 swig 命令更改为:

neoleo_wrap.c : $(srcdir)/neoleo.i neoleo_swig.c neoleo_swig.h
        swig -tcl8 -o $@ $<