Automake генерирует двоичные файлы в bin/вместо src/

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

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

my_project

  • ЦСИ

  • бен

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

EDIT: Я использую С++. У моего Makefile.am нет ничего особенного. Просто переменные bin_PROGRAM и _SOURCES.

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

Ответ 1

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

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

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

Ответ 2

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

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

cd my_project
mkdir build
cd build
../configure
make

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

Ответ 3

Один из способов сказать 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" проглатывает его. Не может быть так много взлома, хотя...