Autotool automake выводит исполняемый файл с версией

Я пытаюсь добавить к выходному имени исполняемого файла проекта автоинструмента номер версии.

С libs очень просто: вы можете добавить -version-info возможность Makefile.am

Как я могу сделать то же самое сbin_PROGRAMS

Пока что попробовал:

HELLO_VERSION_CURRENT = 1
HELLO_VERSION_REVISION = 2
HELLO_VERSION_AGE = 1

bin_PROGRAMS = hello_${HELLO_VERSION_CURRENT}_${HELLO_VERSION_REVISION}_${HELLO_VERSION_AGE}
hello_SOURCES = hello.c

Таким образом, он не компилируется из-за SOURCES должно быть: hello_1_2_1_SOURCES, но я не знаю, как сказать, чтобы автоматизировать это.

Другим способом может быть запуск сценария после сборки: как добавить действие после сборки в Makefile.am?

3 ответа

Решение

Как насчет использования некоторых предустановок autoconf выходные переменные в вашем Makefile.am:

bin_PROGRAMS = hello_@PACKAGE_VERSION@

hello_@PACKAGE_VERSION@_SOURCES = hello.c

Предыдущие работы для меня на Дарвина с autoconf v2.69 и automake v1.15.

С использованием PACKAGE_VERSION из вашего исходного кода еще проще: #include "config.h" вот где все выходные переменные autoconf #define д. Например:

/* config.h.  Generated from config.h.in by configure. */
/* config.h.in.  Generated from configure.ac by autoheader. */

...

#define PACKAGE_VERSION "1.2.3-rc-whatever"

Ссылка:

https://www.gnu.org/software/autoconf/manual/autoconf

Вы можете сделать это так:

HELLO_VERSION_CURRENT = 1
HELLO_VERSION_REVISION = 2
HELLO_VERSION_AGE = 1

bin_PROGRAMS = hello_$(HELLO_VERSION_CURRENT)_$(HELLO_VERSION_REVISION)_$(HELLO_VERSION_AGE)
hello_$(HELLO_VERSION_CURRENT)_$(HELLO_VERSION_REVISION)_$(HELLO_VERSION_AGE)_SOURCES = hello.c

Хотя, в этом случае, я бы предложил сделать более короткие имена переменных...

В конце я добавляю следующее к моему Makefile.am

all:
    cp ./.libs/hello ./.libs/hello_${HELLO_VERSION_CURRENT}_${HELLO_VERSION_REVISION}_${HELLO_VERSION_AGE}

РЕДАКТИРОВАТЬ Я нашел новое решение

HELLO_VERSION_CURRENT = 1
HELLO_VERSION_REVISION = 2
HELLO_VERSION_AGE = 1

bin_PROGRAMS = hello_$(HELLO_VERSION_CURRENT)_$(HELLO_VERSION_REVISION)_$(HELLO_VERSION_AGE)
hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__SOURCES = hello.c

hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__CFLAGS =
hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__LDFLAGS =

AM_CFLAGS = @hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__CFLAGS@
AM_LDFLAGS = @hello___HELLO_VERSION_CURRENT____HELLO_VERSION_REVISION____HELLO_VERSION_AGE__LDFLAGS@

CLEANFILES = *~ 
Другие вопросы по тегам