Как использовать файлы ответов с Embarcadero Make.exe

Я создаю проект с помощью инструментов командной строки C++Builder XE5, но существует слишком много объектных файлов, поэтому вывод:

MAKE Version 5.4  Copyright (c) 1987, 2010 Embarcadero Technologies, Inc.
    ilink64 ...........

Fatal: Command arguments too long

Как обойти эту проблему?

(Мета-примечание: я собираюсь ответить на свой собственный вопрос, но мне понадобилась целая вечность, чтобы понять это, поскольку официальная документация не очень информативна, поэтому я публикую этот вопросник на случай, если он поможет кому-то еще с той же проблемой).


person M.M    schedule 12.06.2014    source источник


Ответы (1)


Пример синтаксиса для создания и использования файла ответов в make-файле:

myproject.dll: $(MANYOBJECTS)
    ilink64 $(LINKER_FLAGS) @&&.
$(MANYOBJECTS), myproject.dll, , import64 cw64mt
.

Ключевые идеи:

  • символ, следующий сразу за &&, является символом, который будет использоваться в качестве разделителя, возможны и другие разделители, кроме .
  • текст между двумя . расширяется и помещается во временный файл
  • Закрывающий разделитель должен быть первым символом в строке.
  • временное имя файла заменяет &&.....
  • Все, что находится после открывающего разделителя в той же строке, игнорируется.
  • @ означает, что ilink64 будет рассматривать содержимое временного файла как файл ответов, а не как объектный файл.
  • Все, что следует за файлом ответов, на самом деле игнорируется ilink64, несмотря на правильное отображение в выводе команды (не знаю почему, но это означает, что вы должны сделать так, чтобы файл ответов содержал всю оставшуюся часть команды).

Команда, сгенерированная этим примером, была:

MAKE Version 5.4  Copyright (c) 1987, 2010 Embarcadero Technologies, Inc.
    ilink64 -q -aa -Tpd -x -Gn c0x64 @MAKE0000.@@@

(примечание: мои флаги компоновщика могут быть неверными, это просто демонстрация того, как работает файл ответов).

person M.M    schedule 12.06.2014