2013-09-30 3 views
8

Я выполняю аутоутилизацию проекта библиотеки, и в этом проекте есть несколько примеров программ. Я хочу, чтобы примеры программ были распределены на dist, но не.automake: Как скопировать файлы в каталог сборки?

В настоящее время демонстрационные программы организованы следующим образом:

src/*.cpp (library source) 
include/*.h (library headers) 
demos/demo.cpp (example program) 
demos/RunDemo (script to run demo) 

Важно, чтобы RunDemo быть работоспособным после построения программного обеспечения, не требуя от «установки» шаг.

До сих пор я смог построить «демонстрационную» версию, используя цель noinst_PROGRAMS. Однако, после того, как make в VPATH сборки, следующие доступны:

build/src/.libs/libxxx.so (etc..) 
build/demos/demo 

Как вы можете видеть, сценарий RunDemo необходимо выполнить «демо» не копируется в $ (builddir). Я попробовал несколько вещей, например, добавление RunDemo к dist_noinst_SCRIPTS, а также добавлять свои собственные цели копирования и пытается не зацепить all .. независимо от того, что я стараюсь, я всегда получаю выход,

$ make RunDemo 
make: Nothing to be done for `../../../projects/demo/RunDemo'. 

я, кажется, чтобы не удалось создать цель в builddir, в которой говорится: «Если этот файл отсутствует в builddir, скопируйте его из srcdir».

Возможно ли это с помощью automake?

ответ

7

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

В вашем случае это будет выглядеть

AC_CONFIG_LINKS([demos/RunDemo:demos/RunDemo]) 

Из autoconf manual:

Macro: AC_CONFIG_LINKS (адр: источник ... [CMDS], [Инициализационные-CMDS])

Сделать AC_OUTPUT связать каждый из существующих файлов источника имя соответствующей ссылки Dest. Делает символическую ссылку, если это возможно, в противном случае - жесткая ссылка, если возможно, в противном случае - копия. Источник Dest и имена должны быть относительно источника верхнего уровня или построить каталог

Использование dist_noinst_SCRIPTS еще необходимо для файла, который будет распространен.

+0

Это, кажется, решает мою проблему, спасибо! – Steve

+0

Есть ли способ сделать это с помощью каталогов, а не только файлов? –

+0

Я предполагаю, что 'AC_CONFIG_LINKS ([каталог: каталог])' не работает? Я не уверен, почему это было бы, но вы могли бы попробовать написать команду, чтобы скопировать ее с помощью 'AC_CONFIG_COMMANDS', используя переменные' srcdir' и 'builddir'. –

Смежные вопросы