Autotools — компиляция, но не распространение

у меня есть структура каталогов как

src
 \__lib_foo
 |   \__ foo.c foo.h
 \__ main
      \__ main.c main.h

main — это главное приложение, а main.c использует некоторую функцию, определенную в foo.c. Требование для меня: «lib_foo должен быть скомпилирован, но не распространен»... как я могу этого добиться??

заранее спасибо


person user1128797    schedule 26.01.2012    source источник


Ответы (2)


Автоинструменты обеспечивают основу для распространения исходного кода, а не скомпилированных продуктов. Если это ваш вопрос, вы можете легко использовать проект с автоинструментами для создания двоичного пакета (rpm, deb, pkg и т. д.) и его распространения. С другой стороны, если вы просто ищете способ использовать foo.c для создания удобной библиотеки, с которой main статически компонуется во время сборки, то (при условии, что вы используете automake) вы хотите поместить это в Makefile. являюсь:

bin_PROGRAMS= main
noinst_LIBRARIES = libfoo.a
libfoo_a_SOURCES = foo.c

Если вы измените имя foo.c на libfoo.c, третья строка не понадобится.

--EDIT после того, как вопрос был отредактирован для отображения неплоской структуры каталогов--

Если у вас нет файлов foo.c и main.c в одном каталоге, потребуется немного больше работы. В файле верхнего уровня/Makefile.am:

# You must list lib_foo first
SUBDIRS = lib_foo main

в lib_foo/Makefile.am

noinst_LIBRARIES = libfoo.a
libfoo_a_SOURCES = foo.c

и в main/Makefile.am

bin_PROGRAMS = main
main_LDADD = ../lib_foo/libfoo.a
person William Pursell    schedule 26.01.2012

Скомпилированные программы никогда не распространяются, но исходный код скомпилированных программ, конечно, обычно распространяется. (Было бы не так уж много смысла в дистрибутиве с исходным кодом без исходного кода, не так ли.) Существует также nodist_*_SOURCES (см. главу 14.2 Детальное управление распространением в руководстве по automake). Также обратите внимание, что BUILT_SOURCES по умолчанию является nodist, если только он не переопределен, например.

bin_PROGRAMS = foo
nodist_foo_SOURCES = foo.c
BUILT_SOURCES = foo.c

но:

bin_PROGRAMS = foo
foo_SOURCES = foo.c
BUILT_SOURCES = foo.h
person jørgensen    schedule 26.01.2012