Автоинструменты - компилировать, но не распространять - PullRequest
0 голосов
/ 26 января 2012

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 26 января 2012

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

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

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

- ИЗМЕНИТЬ после того, как вопрос был отредактирован для отображения неплоской структуры каталогов -

Если у вас нет foo.c и main.c в одном каталоге, потребуется немного больше работы. В toplevel / 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
0 голосов
/ 26 января 2012

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

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

но:

bin_PROGRAMS = foo
foo_SOURCES = foo.c
BUILT_SOURCES = foo.h
...