Почему экспортированные переменные в Makefile не принимаются исполняемым файлом? - PullRequest
4 голосов
/ 09 августа 2011

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

Пожалуйста, помогите мне.

31 test:
32         @ echo
33         @ echo "Testing Electric Fence."
34         @ echo "After the last test, it should print that the test has PASSED."
35         ./eftest
36         ./tstheap 3072
37         export EF_ERRTRACK_START=3
38         export EF_ERRTRACK_END=5
39         ./time-interval-measurement-test
40         @ echo
41         @ echo "Electric Fence confidence test PASSED." 
42         @ echo

time-interval-measurement-test - исполняемый файл (программа C), который должен получать экспортированные переменные, но не получает. Пожалуйста, помогите мне.

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

Если я не ошибаюсь, каждая строка в Makefile - это отдельный shell-процесс.Таким образом, экспорт оболочки не работает для нескольких процессов: один из способов сделать это - поместить их в одну строку:

test:
         @ echo
         @ echo "Testing Electric Fence."
         @ echo "After the last test, it should print that the test has PASSED."
         ./eftest
         ./tstheap 3072
         EF_ERRTRACK_START=3 EF_ERRTRACK_END=5 ./time-interval-measurement-test
         @ echo
         @ echo "Electric Fence confidence test PASSED." 
         @ echo

или экранировать перевод строки с помощью '\'

test:
        [..]
        EF_ERRTRACK_START=3 \
        EF_ERRTRACK_END=5 \
        ./time-interval-measurement-test

Например, переменные ENV доступны для ./time-interval-measrument

2 голосов
/ 09 августа 2011

Я задавал похожий вопрос, но это не тот же сценарий как реализовать разделяемую переменную makefile

В идеале ваши экспортированные переменные должны были передаваться дочернему процессу, мне интересно, совпадает ли ваша дочерняя оболочка с родительским.

Попробуйте следующее - экспорт EF_ERRTRACK_START = 3; экспорт EF_ERRTRACK_END = 5; ./time-interval-measurement-test

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