Мой компилятор не анализирует escape-последовательности, как ожидалось - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь запустить статический анализ моего кода с помощью инструмента.Makefile содержит:

export TASK=MY_TASK_NAME
my_static_code_tool.exe <arguments> -- gcc <arguments..> -D__TASK_NAME__=\"$(TASK)\" -o missionFile.o missionFile.c

Я считаю, что он выполняется без проблем в RedHat, но не запускается в моей среде Cygwin.Я назначаю переменную __TASK_NAME__ неподписанному символу в C-файле, например:

const unsigned char TASK_NAME[] = __TASK_NAME__;

Я получаю сообщение об ошибке:

gcc: нет входных файлов

Я уверен, что все мои аргументы верны, и я ссылаюсь на источники в правильном каталоге.Для меня это выглядит так, как будто -- останавливает анализ escape-последовательностей в команде в Windows.Кто-нибудь может мне помочь с обходным путем?

1 Ответ

0 голосов
/ 04 ноября 2018

-- используется инструментом для представления компилятора и его аргументов [и, таким образом, информирует инструмент о том, что следующее зависит от компилятора].В GCC были все необходимые исходные файлы / файлы / конфигурации, определенные в Makefile.Однако он не был полностью обработан в оболочке Cygwin (обработка команды остановлена ​​с выходом из памяти, следовательно, с соответствующей ошибкой gcc).

Решением, которое я использовал для выполнения этой работы, была строковая обработка перед процессором.

C file:

#define STRINGIFY_IT(str) STRING_OF(str)
#define STRING_OF(str) #str

const unsigned char TASK_NAME[] = STRINGIFY_IT(__TASK_NAME__);

Makefile:

export TASK=MY_TASK_NAME
my_static_code_tool.exe <arguments> -- gcc <arguments..> -D__TASK_NAME__=$(TASK) -o missionFile.o missionFile.c

Итак, если кто-либо из вас столкнется с такими проблемами в будущем с помощью сторонних инструментов, постарайтесь не передавать строковые аргументы через командулиния к GCC (так как они должны быть экранированы и могут нарушить команду)

...