Обычно версия определяется как композиция из нескольких #define
значений (например, в arv library ).
Итак, давайте рассмотрим простой и рабочий пример:
// myversion.h
#define __MY_MAJOR__ 1
#define __MY_MINOR__ 8
Затем в вашем Makefile:
# Makefile
source_file := myversion.h
MAJOR_Identifier := __MY_MAJOR__
MINOR_Identifier := __MY_MINOR__
MAJOR := `cat $(source_file) | tr -s ' ' | grep "\#define $(MAJOR_Identifier)" | cut -d" " -f 3`
MINOR := `cat $(source_file) | tr -s ' ' | grep '\#define $(MINOR_Identifier)' | cut -d" " -f 3`
all:
@echo "From the Makefile we extract: MAJOR=$(MAJOR) MINOR=$(MINOR)"
Объяснение
Здесь я использовал несколько инструментов, чтобы они были более надежными:
tr -s ' '
: чтобы удалить дополнительное пространство между элементами,
grep
: чтобы выбрать уникальную строку, соответствующую нашей цели,
cut -d" " -f 3
: извлечь третий элемент выбранной строки, который является целевым значением!
Обратите внимание, что определяемые значения могут быть любыми (не только числовыми).
Остерегайтесь использовать :=
(не =
), см .: https://stackoverflow.com/a/10081105/4716013