Как передать строку из файла make в программу на C ++ - PullRequest
0 голосов
/ 09 февраля 2019

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

CFLAGS += -DBUILD_NUMBER=$(BUILD_NUMBER)

, и я могу получить к нему доступ как int, например так:

fprintf(stderr, "\n%s v%d.%d.%d.%d\n", APPNAME, MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION, BUILD_NUMBER, MYBRANCH);

, но я, кажется, не достигаюто же самое со строкой.

CFLAGS += -DMYBRANCH=$(BRANCH)

fprintf(stderr, "\n%s v%d.%d.%d.%d.%s\n", APPNAME, MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION, BUILD_NUMBER, MYBRANCH);

Я получаю эту ошибку с приведенным выше:

main.cpp: In function ‘int args_parse_cmd_line(int, char**)’:
<command-line>:0:10: error: ‘FIL’ was not declared in this scope
main.cpp:72:114: note: in expansion of macro ‘MYBRANCH’
 %s\n", APPNAME, MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION, BUILD_NUMBER, MYBRANCH);
                                                                            ^~~~~~~~

Может кто-нибудь дать мне совет, что я делаю неправильно?«FIL-1234» - это пример названия нашей ветви, которое я пытаюсь добавить в метаданные нашей сборки для отслеживаемости.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Не уверен, что это идеально, но это работает.

CFLAGS += -DMYBRANCH=\"$(BRANCH)\"

Я думаю, что решение Джона привлекательно, поскольку я не без ума от побега персонажей.

0 голосов
/ 09 февраля 2019

Этот прием препроцессора должен сработать

#define xstr(s) str(s)
#define str(s) #s

fprintf(stderr, "\n%s v%d.%d.%d.%d.%s\n", APPNAME, MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION, BUILD_NUMBER, xstr(MYBRANCH));

Из вашей ошибки ясно, что MYBRANCH расширяется до FIL-1234, когда компилятор, не без оснований, ищет переменную FIL.Вам нужно превратить раскрытие макроса в строковый литерал, и приведенный выше код должен это сделать.Хотя я ничего не проверял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...