установить LD_LIBRARY_PATH из Makefile - PullRequest
15 голосов
/ 25 апреля 2009

Как установить переменную env LD_LIBRARY_PATH из файла Makefile?

У меня есть некоторый исходный код, который ссылается на общую библиотеку, которая, в свою очередь, ссылается на другую общую библиотеку (более 1). Makefile для сборки приложения знает только о первой общей библиотеке.

Если я хочу построить это, я должен указать: #export LD_LIBRARY_PATH=/path/to/the/shared/libs (для Баш) и это прекрасно работает.

Однако я хотел бы сделать это из самого Makefile.

Ответы [ 4 ]

9 голосов
/ 26 апреля 2009

Да, «экспорт» - это правильная директива для использования. Это подробно задокументировано здесь . Это тот же механизм, который сам make использует для распространения переменных на подмодели. Недостатком является то, что вы не можете выборочно передать переменную одним командам, а не другим.

Есть еще два варианта:

  • Использование .EXPORT_ALL_VARIABLES (указать где-то цель) приводит к экспорту всех переменных в среду подкоманд.
  • Укажите в командной строке:

    foo:
        EXPORTEDVAR=somevalue gcc $< -o $@
    
8 голосов
/ 02 мая 2012

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

Либо вы добавляете его непосредственно ко всем вызовам gcc и ld в рамках ваших целевых правил, например,

my_target: my_target.o
    LD_LIBRARY_PATH=/my/library/path gcc -o my_target my_target.o

или вы задаете глобальные переменные make, которые определяют компиляторы, включая путь, например ::100100

 CC=LD_LIBRARY_PATH=/my/library/path gcc
 CPP=LD_LIBRARY_PATH=/my/library/path gcc
 CXX=LD_LIBRARY_PATH=/my/library/path gcc

Я выбрал gcc в качестве компилятора, но, конечно, вы можете использовать любой понравившийся вам компилятор.

3 голосов
/ 15 июня 2016

У меня была такая же проблема, мне пришлось экспортировать LD_LIBRARY_PATH, как вы это сделали:

export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command

Мой друг показал мне альтернативу, когда LD_LIBRARY_PATH применяется только к одной команде, не заметьте точку с запятой ниже.

LD_LIBRARY_PATH=/path/to/the/shared/libs my_command

Эта статья объясняет больше.

2 голосов
/ 25 апреля 2009

Я пытался добавить:

export LD_LIBRARY_PATH=/path/to/the/shared/libs

, который, очевидно, работает нормально.

Я получал ошибки, потому что мои / path / to / the / shared / libs были неверны.

Было бы хорошо узнать, что другие для этого делают и / или есть ли лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...