Система сборки GNU не использует каталоги obj/
, поэтому автоинструменты не предназначены для поддержки этого.
Однако я могу придумать два способа обойти это.
Как установщик, вы можете собрать любой пакет из его исходного каталога, набрав
mkdir builddir
cd builddir
../path-to-sourcedir/configure
make
Тогда любой выходной файл будет создан в каталоге builddir/
. Эта схема компиляции позволяет компилировать исходный код, хранящийся в каталоге только для чтения (это имело больше смысла в те годы, когда FSF распространял компакт-диски с несжатым исходным кодом), или компилировать тот же исходный код с различными настройками (или даже для разные архитектуры).
Как упаковщик, единственный способ заставить ваш пакет собрать все в obj/
- это поместить свой Makefile.am
в obj/
и объявить там все свои правила сборки. Это будет означать obj/Makefile.am
, похожий на:
bin_PROGRAMS = foo bar
foo_SOURCES = ../src/foo/main.c ../src/foo/help.c ../src/foo/list.c
bar_SOURCES = ../src/bar/bar.c
и т.д.. Я помню, что 10 лет назад POSE, эмулятор Palm OS, использовал настройку, подобную описанной выше. Я не рекомендую это, поскольку это не действительно ремонтопригодно. Действительно лучше придерживаться философии инструментов и использовать системы сборки, которые работают как другие пакеты GNU.
Для ознакомления с системой сборки GNU я рекомендую прочитать введение в руководство Automake:
http://www.gnu.org/software/automake/manual/automake.html#GNU-Build-System
Особенно раздел «Варианты использования».
Если вас не интересуют эти варианты использования, я думаю, что вам лучше НЕ использовать Automake, а создавать собственные файлы Makefile. В противном случае вы будете продолжать пытаться заставить Automake делать то, для чего он не предназначен, и вы быстро его возненавидите.
РЕДАКТИРОВАТЬ 2013-08-26 : обратите внимание, что проект Automake с использованием подкаталога с именем с использованием obj/
не является переносимым для BSD make.