Автоматически генерировать двоичные файлы в bin / вместо src / - PullRequest
25 голосов
/ 26 января 2010

Я искал ответ на этот вопрос, но не смог найти ничего хорошего. Может быть, они старые и что-то изменилось, поэтому я спрашиваю снова.

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

my_project

  • ЦСИ

  • бен

Я хочу, чтобы, когда я делал в корневом каталоге, двоичные файлы помещались в ./bin, вместо того, чтобы загромождать ./src. Но как?

РЕДАКТИРОВАТЬ: я использую C ++. Мой Makefile.am не имеет ничего особенного. Только переменные bin_PROGRAM и _SOURCES.

Когда я запускаю make, сгенерированные двоичные файлы помещаются в ./src. Я просто хочу их в ./bin.

Ответы [ 3 ]

34 голосов
/ 14 февраля 2010

У вас здесь неправильная идея.

Ваше дерево сборки находится там, где вы запускаете configure. Вот как autoconf предназначен для работы. Пользователи вашего пакета (которые не хотят загромождать свое исходное дерево) будут ожидать, что он будет работать таким образом.

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

26 голосов
/ 27 января 2010

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

Если вы не хотите загромождать исходный каталог, попробуйте следующее:

cd my_project
mkdir build
cd build
../configure
make

Это поместит все сгенерированные файлы (например, make-файлы, двоичные файлы, объектные файлы) в подкаталоги my_project/build.

14 голосов
/ 05 февраля 2010

Один из способов заставить Automake создавать двоичные файлы в определенном каталоге - добавить этот каталог прямо к имени в переменной «bin_PROGRAMS».

Рассмотрим следующий src / Makefile.am:

bin_PROGRAMS = foo
foo_SOURCES = ...
foo_CPPFLAGS = ...
foo_LDFLAGS = ...

Он создает двоичный файл "src / foo", но вы можете указать Automake использовать источники в src для создания двоичного файла "bin / foo":

bin_PROGRAMS = $(top_builddir)/bin/foo
__top_builddir__bin_foo_SOURCES = ...
__top_builddir__bin_foo_CPPFLAGS = ...
__top_builddir__bin_foo_LDFLAGS = ...

Я попробовал это с некоторыми пакетами, и даже "make distcheck" проглотил его. Не может быть так много взломать, хотя ...

...