2016-12-03 4 views
1

Я внесла изменения в программу, которая является частью гораздо более крупного проекта, в котором используются Intel Performance Primitives. Оказывается, мои недавние изменения используют вызовы, которые доступны только в новейшей версии IPP, в то время как многие пользователи по-прежнему используют более старые версии. Данная программа не является существенной, поэтому я хочу сделать ее необязательной, а не обратной портированием на самые старые версии IPP (за последние годы на IPP было много изменений API).Разрешить automake генерировать необязательные правила компиляции

Мы используем automake/autoconf для создания Make-файлов. В идеале моя конкретная программа (один исходный файл на C) не будет компилироваться по умолчанию, если только кто-то специально не запускает «make myprog».

Есть ли способ сделать это или мне нужно поддерживать параметр «--with-myprog» для скрипта configure?

Makefile.am в настоящее время (я думаю, что это все, что имеет отношение)

bin_PROGRAMS = \ 
    stripVDIF \ 
    {snip} 
    generateVDIF 

generateVDIF_SOURCES = \ 
    generateVDIF.c 

generateVDIF_LDADD = $(IPP_LIBS) $(LDADD) 

Моя программа generateVDIF

ответ

1

Если вы не хотите, чтобы он был установлен, вы можете просто объявить его EXTRA_PROGRAMS, а не bin_PROGRAMS, и это должно делать именно то, что вы хотите (работает только с make myprog).

Если вы хотите, чтобы установить, вы должны будете использовать AC_ARG_WITH и AM_CONDITIONAL в configure.ac, а затем что-то вроде

bin_PROGRAMS = .... 

if ENABLE_MYPROG 
    bin_PROGRAMS += myprog 
endif 

, а остальное остается тем же самым.

+0

EXTRA_PRORGRAMS делает именно то, что я просил. Обратите внимание, что check_PROGRAMS, похоже, делает то же самое. Однако я понял, что отсутствие установки - это боль, поэтому добавили опцию --with-myprog для configure.ac. – Chris

+0

'check_PROGRAMS' построены во время' make check' и 'make distcheck', которые являются« тестовыми »параметрами (и одним из немногих префиксов, которые иначе не установлены). Префикс 'EXTRA_' предназначен для необязательного и не установленного. –

0

право способ сделать это, чтобы поместить сборку вашего дополнительно программа под управлением опции ./configure, так что ./configure может управлять ею надлежащим образом. См. how to add configure options

Если это звучит слишком похоже на тяжелую работу вы могли бы использовать тот факт, что дополнительный make код в Makefile.am просто проходит через к генерируемой Makefile.

Так, например, если следующий будет Makefile.am для цели foo:

EXTRA_DIST = README 
bin_PROGRAMS = foo 
foo_SOURCES = foo.c 

и вы хотите добавить неуправляемую цель bar, программу, построенную из bar.c, , то вы можете продлить Makefile.am к:

EXTRA_DIST = README bar.c 
bin_PROGRAMS = foo 
foo_SOURCES = foo.c 

bar: bar.o 
    $(CC) $(LDFLAGS) [email protected] $< $(LDLIBS) 

пакет автонастройки затем поддержит make bar, и вы можете документировать этот факт для пользователя с соответствующими предостережениями - в частности, включая отсутствие обычного автоохлаждения install и uninstall.

Очевидно, что этот ярлык отвлечет от впечатляющего знающего пользователя ваших профессиональных отбивных.

+0

Пока я вижу, чего вы пытаетесь достичь здесь, я не мог заставить это работать, поскольку строка «manual» make не включает различные другие зависимости, необходимые для компиляции.Я уверен, что его можно заставить работать, но решение Диего достигает того же, что и без суеты. – Chris