2013-02-19 2 views
2

Мой проект структурированы как следует:Make distcheck не копирует все источники

/ subdir1 subdir2 subdir3 common_include

Каждый подкаталог собирает различные исполняемые файлы и библиотеки для моего проекта. common_include включает в себя .h (заголовки C++), включенные всеми моими поддиректорами.

Эти файлы заголовков НЕ добавляются к каждому Makefile.am в атрибуте SOURCES. Но я добавляю следующий путь -I ../ common_include к атрибуту CPPFLAGS

Я использую систему сборки GNU для конфигурации. Все работает.

Но когда я хочу выпустить проект, набрав: make distcheck для создания: my-project-1.0.tar.gz, архив успешно создан.

Но он содержит все поддиректора, а не каталог common_include. Поэтому конечный пользователь не может компилировать ..

Любая помощь?

Спасибо

+0

Я не верю, что 'make distcheck' успешно завершается. Это может сделать архив (самый первый этап), но я не думаю, что 'make distcheck' фактически завершается без ошибок, если заголовочные файлы, которые ему нужно построить, не включаются в tarball. Если это произойдет, я сообщаю об ошибке для пользователей autoconf. – ldav1s

ответ

2

Вам нужно добавить файлы заголовков в common_include ваших ИСТОЧНИКОВ где-то. В противном случае они не будут упакованы в архив для make dist. В этом случае ошибка make distcheck. Как указано в моем комментарии, я думаю, что make distcheck действительно не работает. Вы должны проверить это в своем рабочем каталоге. Вероятно, будет каталог _build и каталог _inst и, вероятно, каталог my-project-1.0, которые не являются частью вашей структуры каталогов.

EDIT: Вот как я это сделать:

configure.ac

 
AC_PREREQ([2.62]) 
AC_INIT([my-project], [1.0.0], [[email protected]], [my-project]) 
AC_CONFIG_SRCDIR([subdir1/foo.cc]) 
LT_PREREQ([2.2.4]) 
AC_CANONICAL_SYSTEM 

AM_INIT_AUTOMAKE 
LT_INIT 

AC_PROG_CXX 
AC_PROG_MAKE_SET 
AC_SUBST([LIBTOOL_DEPS]) 

AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 

Типичные вещи шаблонный. Не так много увидеть, кроме компилятора C++.

Makefile.am

 
AUTOMAKE_OPTIONS = 1.11 foreign 

bin_PROGRAMS = baz 
lib_LTLIBRARIES=libfoo.la libbar.la 

baz_SOURCES=$(top_srcdir)/subdir3/baz.cc \ 
$(top_srcdir)/common_include/bar.hpp \ 
$(top_srcdir)/common_include/foo.hpp 
baz_CXXFLAGS=-I$(top_srcdir)/common_include 
baz_LDADD=libfoo.la libbar.la 

libfoo_la_CXXFLAGS=-I$(top_srcdir)/common_include 
libfoo_la_SOURCES=$(top_srcdir)/subdir1/foo.cc \ 
$(top_srcdir)/common_include/foo.hpp 

libbar_la_CXXFLAGS=-I$(top_srcdir)/common_include 
libbar_la_SOURCES=$(top_srcdir)/subdir2/bar.cc \ 
$(top_srcdir)/common_include/bar.hpp 

Сделал две библиотеки и программа, которая зависит от них с заголовками в common_include. Чтобы упаковать вещи, вам действительно нужно всего лишь ссылаться на файлы заголовков один раз для некоторого объекта. Я всегда перечисляю их в основном для их документирования. Система autoconf достаточно умна, чтобы создавать правильные зависимости для заголовков.

В случае, если вам интересно, make distcheck действительно работает:

мой-проект-1.0.0.tar.gz

 
my-project-1.0.0/ 
my-project-1.0.0/ltmain.sh 
my-project-1.0.0/configure.ac 
my-project-1.0.0/install-sh 
my-project-1.0.0/missing 
my-project-1.0.0/subdir2/ 
my-project-1.0.0/subdir2/bar.cc 
my-project-1.0.0/subdir3/ 
my-project-1.0.0/subdir3/baz.cc 
my-project-1.0.0/Makefile.in 
my-project-1.0.0/subdir1/ 
my-project-1.0.0/subdir1/foo.cc 
my-project-1.0.0/common_include/ 
my-project-1.0.0/common_include/bar.hpp 
my-project-1.0.0/common_include/foo.hpp 
my-project-1.0.0/config.sub 
my-project-1.0.0/configure 
my-project-1.0.0/config.guess 
my-project-1.0.0/aclocal.m4 
my-project-1.0.0/Makefile.am 
my-project-1.0.0/depcomp 
+0

Как? Например ../common_include/header.h не работает ... И какой? Все поддиры используют common_include. – odysseasg

4

Похоже, у вас есть иерархия Makefile.am файлов, по одному в каждом каталоге.Одно простое исправление этой проблемы было бы редактировать Makefile.am на верхнем уровне всего проекта и добавить к нему:

EXTRA_DIST = common_include/header.h common_include/other-header.h # ... 

и так далее, список всех заголовков. EXTRA_DIST используется Automake для обозначения других файлов, которые должны быть включены в дистрибутив, даже если на них не ссылаются никакие другие правила, о которых Automake не знает, и является хорошим общим механизмом для решения проблем такого рода.

Смежные вопросы