Я искал ответ на этот вопрос, но не мог найти пользу. Возможно, они стары, и что-то изменилось, таким образом, я спрашиваю снова.
У меня есть структура каталогов как:
my_project
src
мусорное ведро
Я хочу это, когда я действительно делаю в корневом каталоге, двоичные файлы помещаются в./мусорное ведро, вместо того, чтобы создать помехи./src. Но как?
Править: Я использую C++. Мой Makefile.am не имеет ничего специального. Просто bin_PROGRAM и _SOURCES переменные.
Когда я работаю, делают, сгенерированные двоичные файлы помещаются в./src. Я просто хочу их в./мусорное ведро.
Вы ошиблись здесь.
Ваше дерево сборки находится везде, где вы запускаете configure
. Вот как работает autoconf. Пользователи вашего пакета (которые не хотят загромождать свое дерево исходных текстов) будут ожидать, что это будет работать именно так.
Этот подход является более общим решением с гораздо большей гибкостью, чем организация, которую вы себе представляете. Например, нет ничего необычного в том, чтобы поддерживать исходные коды и создавать файлы в отдельных файловых системах.
Automake не очень хорошо справляется, если вы попытаетесь настроить свои каталоги по-другому, чем ожидает. То, что вы хотите, будут включать в себя письменные дополнительные правила для перемещения дворовиков на ../ BIN
. После их составления, что ненужно сложно.
Если вы не хотите загромождать свой исходный каталог, попробуйте следующее:
cd my_project
mkdir build
cd build
../configure
make
, который поставит все сгенерированные файлы (например, makefiles, двоичные файлы, объектные файлы) в подкаталогах my_project / build
.
Один из способов сказать 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 = ...
Я пробовал это с некоторыми пакетами и даже "заставить distcheck" проглотить это. Хотя это не может быть таким уж большим взломом...