Это не работает, потому что вам нужен еще третий уровень цитирования: поскольку вы передаете это значение в сценарий configure
через командную строку, вам нужно указать значение для оболочки.
Вы запускаете это:
./configure "LDFLAGS=-Wl,-rpath,\$\$ORIGIN/../lib"
Оболочка удаляет первый уровень цитирования перед вызовом configure
, поэтому значение LDFLAGS
, которое помещается в ваш make-файл, выглядит следующим образом:
LDFLAGS=-Wl,-rpath,$$ORIGIN/../lib
Затем, когда make запускает компоновщик, он преобразует экранированный $$
в одиночный $
, а make вызовет оболочку и передаст вашу строку ссылки с опцией:
-Wl,-rpath,$ORIGIN/../lib
Shell расширит $ORIGIN
, потому что он выглядит как переменная оболочки, разверните его до пустой строки, и вы получите результат -Wl,-rpath,/../lib
.
Чтобы получить правильное цитирование, часто бывает полезно работать в обратном направлении. Когда make вызывает вашу строку ссылки, ему необходимо избежать $ORIGIN
, чтобы оболочка не расширяла его, поэтому вы хотите, чтобы аргумент был примерно таким:
'-Wl,-rpath,$ORIGIN/../lib'
Чтобы получить это, вам нужно ваш LDFLAGS
должен быть установлен примерно на:
LDFLAGS='-Wl,-rpath,$$ORIGIN/../lib'
Чтобы получить это, вам нужно убрать все это из оболочки при вызове configure, включая одинарные кавычки, что-то вроде:
./configure "LDFLAGS='-Wl,-rpath,\$\$ORIGIN/../lib'"
(заметьте, я не пробовал)