Доброе время суток!
Вопрос у меня такой:
есть команда в никсах export, которая устанавливает значение системной переменной.......
В консоли и в скриптах она нормально работает, а вот когдая ее пытаюсь запихнуть в какойнить target Makefile'a, то это команда не срабатывает (пишу мне надо сделать чтот тип такого: export LD_LIBRARY_PATH = `pwd`)
Команда export есть не в абстрактных никсах, а конкретно в bash, в других оболочках она может по другому называться и иметь другой синтаксис. Более того, она не устанавливает значение переменной, а делает это значение доступным для других процессов, запускаемых из этого экземпляра оболочки, что никак не мешает запущенным процессам устанавливать эту переменную в другое значение или вообще ее игнорировать. Не совсем понятно где вы это используете, что хотите получить и почему решили что это не работает.
>Команда export есть не в абстрактных никсах, а конкретно в bash, в
>других оболочках она может по другому называться и иметь другой синтаксис.
>Более того, она не устанавливает значение переменной, а делает это значение
>доступным для других процессов, запускаемых из этого экземпляра оболочки, что никак
>не мешает запущенным процессам устанавливать эту переменную в другое значение или
>вообще ее игнорировать. Не совсем понятно где вы это используете, что
>хотите получить и почему решили что это не работает.оболочка bash. В консоли и в скриптах она (функция export) нормально работает
среда: FreeBSD6.2
мне надо чтобы после выполнения определенного target'a make'a у меня это значение этой сист переменной было задано тем что надо.П.С. Дело обстоит так: мне надо чтобы после выполнения make install у меня в системной переменной LD_LIBRARY_PATH был задан путь к текущей директории. В шелле это делается - export LD_LIBRARY_PATH=`pwd` ...... В makefile это не пашет...... :(
Поищите в makefile LD_LIBRARY_PATH, возможно она там переопределяется. Кроме того, не забывайте что нет понятия системных переменных. Есть просто переменные установленные в данном экземпляре запущенной оболочки, часть из них распознается и используется самим bash, другие могут влиять на дочерние процессы, а могут и не влиять. Если мне не изменяет память, то LD_LIBRARY_PATH указывает путь к разделяемым библиотекам, но для чего нужно их переопределение в момент make install (который просто распихивает файлы по нужным директориям) для меня загадка
>Поищите в makefile LD_LIBRARY_PATH, возможно она там переопределяется. Кроме того, не забывайте
>что нет понятия системных переменных. Есть просто переменные установленные в данном
>экземпляре запущенной оболочки, часть из них распознается и используется самим bash,
>другие могут влиять на дочерние процессы, а могут и не влиять.
>Если мне не изменяет память, то LD_LIBRARY_PATH указывает путь к разделяемым
>библиотекам, но для чего нужно их переопределение в момент make install
>(который просто распихивает файлы по нужным директориям) для меня загадка1) Я создаю свой makefile
2) для своей проги мне надо дописать path чтобы она видела библиотеку..........
Makefile:t1:
@echo t1
@env | grep LD_LIBRARY_PATH || truet2:
@echo t2:pre
@LD_LIBRARY_PATH=aaa env | grep LD_LIBRARY_PATH || true
@echo t2:post
@env | grep LD_LIBRARY_PATH || truet3:
@echo t3:pre
@export LD_LIBRARY_PATH=aaa; env | grep LD_LIBRARY_PATH || true
@echo t3:post
@env | grep LD_LIBRARY_PATH || truet4:
@echo t4:pre
@env LD_LIBRARY_PATH=aaa env | grep LD_LIBRARY_PATH || true
@echo t4:post
@env | grep LD_LIBRARY_PATH || true% make t1
t1% make t2
t2:pre
LD_LIBRARY_PATH=aaa
t2:post% make t3
t3:pre
LD_LIBRARY_PATH=aaa
t3:post% make t4
t4:pre
LD_LIBRARY_PATH=aaa
t4:postСамое правильное, думается, t4.
>[оверквотинг удален]
>t3:pre
>LD_LIBRARY_PATH=aaa
>t3:post
>
>% make t4
>t4:pre
>LD_LIBRARY_PATH=aaa
>t4:post
>
>Самое правильное, думается, t4.Я испробовал все 4 варианта..............
но строчка ---- @env | grep LD_LIBRARY_PATH || true
выводит то состояние переменной, что и было до "изменения" ....
после выполнения makefile'a значение переменной остается таким же как и до его запуска :(
>[оверквотинг удален]
>>LD_LIBRARY_PATH=aaa
>>t4:post
>>
>>Самое правильное, думается, t4.
>
>Я испробовал все 4 варианта..............
>но строчка ---- @env | grep LD_LIBRARY_PATH || true
>выводит то состояние переменной, что и было до "изменения" ....
>после выполнения makefile'a значение переменной остается таким же как и до его
>запуска :(Само собой. То, чего Вы хотите, средствами make сделать не получится. За объяснениями, почему так, обращайтесь к литературе.
>Я испробовал все 4 варианта..............
>но строчка ---- @env | grep LD_LIBRARY_PATH || true
>выводит то состояние переменной, что и было до "изменения" ....
>после выполнения makefile'a значение переменной остается таким же как и до его
>запуска :(Специально для этого и написал, мля. Переменную надо устанавливать для КАЖДОЙ команды. Либо запустить еще одну копию make.
Если ты собрался менять из Makefile переменные в вызывающем make экземпляре shell'а или на весь Makefile, то это, разумеется, сделать нельзя.