2016-12-03 4 views
0

В моем каталоге Src у меня есть файл интерфейс neoleo.i, который используется глоткой для создания neoleo_wrap.c по правилу:разрешения distcheck марка отказано

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

+0

Это Automake вопрос, а не Makefile вопрос. Пожалуйста, настройте теги. – MadScientist

+0

Последующий вопрос: является ли соглашение о включении или исключении сгенерированного кода оболочки в tarball? – blippy

+0

В большинстве случаев вы должны включить сгенерированную оболочку в tarball, чтобы люди могли построить результат без необходимости установки 'swig'. Но если они нуждаются в этом, так или иначе, то не имеет значения, в каком направлении вы идете. – MadScientist

ответ

3

Automake distcheck проверяет, что ваша система сборки корректно ведет себя в соответствии со своими стандартами и часть этого что исходный каталог никоим образом не изменен. distcheck использует разрешения для обеспечения этого. В вашем случае swig пытается записать свой выходной файл в исходный каталог, который является неправильным (согласно automake): этот каталог не должен изменяться.

Даже если вам это не понравилось, ваш make-файл ошибочен, потому что он говорит, что ваше правило будет строить 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 [email protected] $< 
+0

Я не могу вас поблагодарить! Это исправляет проблему. Я, кажется, потратил больше времени на то, чтобы замалчивать autotools, делая то, что я хочу, чем реальное программирование на С. Я сделал src/Makefile.am доступным для справки: https://gist.github.com/blippy/6120a53c10ae438c37399c29e795ef53 – blippy

+0

Что касается использования autotools, это заставляет вас учитывать потребности конечного пользователя перед тем, как кто-либо отправьте вам отчет об ошибке: конечные пользователи хотят строить из дерева, они хотят использовать кросс-компиляторы, им нужны разные вещи. autoconf и automake гарантируют, что все эти вещи доступны в вашем пакете ... но, конечно, чтобы получить их, вы должны убедиться, что они ведут себя правильно. – MadScientist