Я использую jamplus для создания кроссплатформенного проекта поставщика. В osx командная строка инструмента C (подаваемая через clang в ld) слишком длинная.
Файлы ответов — это классический ответ на слишком длинные командные строки: в руководстве jamplus указано, что их можно генерировать на лету.
пример в руководстве выглядит так:
actions response C++
{
$(C++) @@(-filelist @($(2)))
}
Почти готово! Если специально выбить команду C.Link, вот так:
actions response C.Link
{
"$(C.LINK)" $(LINKFLAGS) -o $(<[1]:C) -Wl,-filelist,@($(2:TC)) $(NEEDLIBS:TC) $(LINKLIBS:TC))
}
в моем файле jamfile я получаю нужную мне командную строку, которая передается компоновщику, но файл ответов не заканчивается новой строкой, поэтому ссылка не работает (osx ld требует записей, разделенных новой строкой).
- Есть ли способ расширить список jamplus, объединенный с новыми строками? Я безуспешно пытался использовать расширение соединения
$(LIST:TCJ=\n)
.$(LIST:TCJ=@(\n))
тоже не работает. Если я смогу это сделать, надеюсь, сгенерированный файл будет правильным. - Если нет, то какой код jamplus я могу использовать, чтобы переопределить команду link для clang и создать содержимое на лету из списка? Я ищу наименее инвазивный способ справиться с этим - в идеале, изменить/переопределить инструмент напрямую, вместо добавления новых косвенных целей везде, где требуется ссылка - поскольку это кодовая база нашего поставщика, желательно как можно меньше редактирования.