Установка заголовков в подкаталогах с помощью (nobase_) pkginclude_HEADERS

У меня есть небольшая проблема с automake для обработки подкаталогов при установке заголовков.

Вот примерная иерархия проекта, которая у меня есть:

foo/
foo-bin/
Makefile.am
...
foo-tests/
Makefile.am
...
foo-lib/
Makefile.am
include/
foo/
header1.h
subdir/
header2.h
src/
file1.cpp

Ничего особенного, есть корневой каталог, содержащий configure.acи 3 подкаталога для общей библиотеки, основного двоичного файла и тестов.

Интересная часть здесь foo-lib/, Он содержит библиотеку, на которую ссылается двоичный файл и тесты.

Поскольку я хочу иметь возможность создавать файлы конфигурации из дерева исходных текстов, я решил использовать $top_srcdirОтносительный путь по моему Makefile.am,

Вот как это выглядит:

libfoo_la_SOURCES = \
$(top_srcdir)/foo-lib/src/file1.cpp

pkginclude_HEADERS = \
$(top_srcdir)/foo-lib/include/foo/header1.h \
$(top_srcdir)/foo-lib/include/foo/subdir/header2.h

Без этих $top_srcdir-относительный путь, у меня есть проблемы, когда я пытаюсь использовать foo-lib от foo-binили когда я пытаюсь сгенерировать проект из исходного дерева.

Теперь проблема: при установке этих заголовков, они в конечном итоге сглаживаются!
То есть я в конечном итоге:

$prefix/include/foo/header1.h
$prefix/include/foo/header2.h

Пока я ожидал:

$prefix/include/foo/header1.h
$prefix/include/foo/subdir/header2.h

Итак, я предполагаю, что это то, что nobase_ должен достичь, но поскольку путь, который я использую, не относится к Makefile.am, но $top_srcdirЯ заканчиваю с целым $top_srcdir путь копируется:

$prefix/include/foo-lib/include/foo/header1.h
$prefix/include/foo-lib/include/foo/subdir/header2.h

что явно не то, что ожидается.

Любые мысли и советы по этому вопросу с благодарностью
Если вам нужен доступ к реальному Makefile.am файлы, а не канонические примеры, проект здесь:

https://github.com/NewbiZ/crashburn

0

Решение

Это:

pkginclude_HEADERS = \
$(top_srcdir)/foo-lib/include/foo/header1.h \
$(top_srcdir)/foo-lib/include/foo/subdir/header2.h

говорит установщику разместить заголовки выше в $(pkgincludedir)так сплющено, как вы сказали им быть.

Что вы могли бы сделать, это:

myincludesubdir=$(pkgincludedir)/subdir

pkginclude_HEADERS = $(top_srcdir)/foo-lib/include/foo/header1.h
myincludesub_HEADERS = $(top_srcdir)/foo-lib/include/foo/subdir/header2.h

Это должно установить header1.h в $(pkgincludedir) а также header2.h в $(myincludesubdir) ака $(pkgincludedir)/subdir,

Я бы не использовал nobase_ в этом случае. Результаты, которые вы получили, не кажутся мне неожиданными или ошибочными.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector