Почему make теряет переменные настройки при рекурсивном вызове? - PullRequest
0 голосов
/ 07 октября 2011

Я едва знаю достаточно файлов makefile, чтобы взломать файлы make других людей, а иногда даже не так много.У моего нынешнего работодателя довольно сложная среда сборки, и я добавил пару целей в файл сборки, в основном для самостоятельного документирования всех необходимых мне ключей.(Возможно, есть лучший способ сделать это ... если есть, пожалуйста, дайте мне знать !!)

В любом случае, первая цель работает, как и ожидалось.Вторая цель идентична первой, за исключением того, что назначение BENCH имеет «2» в конце.В противном случае это точно такой же вызов.В какой-то момент во время выполнения переменная BENCH используется для создания каталога. Первая цель создает каталог, как и ожидалось.Вторая цель создает каталог, используя имя BENCH по умолчанию вместо того, которое было передано ему. Каким-то образом он потерял настройку переменной в командной строке, хотя для первой цели работал почти идентичный синтаксис.

Почему он теряет мои переменные настройки, когда вызывает сам?Есть ли какая-то тонкость, которую мне не хватает?Это даже действительная вещь, чтобы сделать?

comp_gate_oct04_ff:
    make clean all BENCH=GATE_OCT04_FF SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 | tee all_gate_oct04_ff.log
    @tail all_gate_oct04_ff.log  | mail -s "Compile for GATE_OCT04_FF is complete" $(SMS_ADDR) $(USER)

comp_gate_oct04_ff2:
    make clean all BENCH=GATE_OCT04_FF2 SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04 | tee all_gate_oct04_ff2.log
    @tail all_gate_oct04_ff2.log  | mail -s "Compile for GATE_OCT04_FF2 is complete" $(SMS_ADDR) $(USER)

1 Ответ

0 голосов
/ 07 октября 2011

Я не понимаю, почему вы получаете эту ошибку, и я не могу воспроизвести ее.Попробуйте что-нибудь попроще:

comp_gate_oct04_ff:
    make foo BENCH=GATE_OCT04_FF

comp_gate_oct04_ff2:
    make foo BENCH=GATE_OCT04_FF2

foo:
    @echo BENCH is $(BENCH)

Расскажите нам, как это ведет себя, и мы пойдем оттуда.

РЕДАКТИРОВАТЬ:
Хорошо, мы сократилипроблема пополам.Теперь попробуйте это:

comp_gate_oct04_ff:
    make clean
    make all BENCH=GATE_OCT04_FF SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04

comp_gate_oct04_ff2:
    make clean
    make all BENCH=GATE_OCT04_FF2 SIMULATOR=NC SIM_64BIT=1 CORNER=FF NETLIST=oct04
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...