Универсально избежать знака доллара - PullRequest
0 голосов
/ 04 октября 2018

Я работаю над встроенным проектом, который состоит из моего собственного кода, а также сторонних библиотек и исполняемых файлов.Чтобы построить все части последовательно, я написал скрипт, который устанавливает переменные среды для кросс-компиляции (CC, CXX, CFLAGS и т. Д.).Среди прочего он устанавливает LDFLAGS для передачи флага rpath компоновщику.Значение rpath содержит маркер $ORIGIN, который не должен быть расширен и должен просматриваться компоновщиком и записываться в выходной двоичный файл как есть.Затем я создаю несколько необходимых сторонних проектов, используя среду, установленную сценарием.В проектах используются разные системы сборки (возможно, make, CMake, другие).Из-за этого и, возможно, из-за сценариев сборки, написанных по-разному, знак доллара расширяется по-разному.То есть, что бы я ни пытался избежать, я получаю разные результаты в разных проектах (например, $$ ORIGIN, RIGIN, пустая строка), но мне никогда не удавалось получить одинаковое значение $ORIGIN во всех двоичных файлах.Есть ли универсальный способ избежать знака доллара, чтобы он работал одинаково по крайней мере в make и shell, но в любой комбинации?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Я столкнулся с той же проблемой расширения, и вот адаптированная версия для сценария bash.

LDFLAGS="-Wl,-rpath=\$ORIGIN"
ORIGIN='\$ORIGIN'

LDFLAGS="-lfoo $LDFLAGS"
LDFLAGS="-L. $LDFLAGS"

echo $LDFLAGS
# -L. -lfoo -Wl,-rpath=$ORIGIN  # <== correct ORIGIN
0 голосов
/ 05 октября 2018

Вот так я наконец решил эту проблему.В дополнение к предыдущим переменным среды, которые необходимо было собрать для моей платформы, я добавил еще две:

ORIGIN=$ORIGIN
O=$$O

Первая - это обход расширения оболочки, а вторая - обход обхода расширения make-файла.С этим исправлением переменные разрешаются сами по себе.Да, это не похоже на идеальное решение, больше похоже на взлом, но пока оно работает, что позволяет мне избегать адаптации среды сборки для каждого стороннего проекта, который я использую.

...