Вызов make из скрипта bash не сделает - PullRequest
1 голос
/ 20 ноября 2010

Я пишу сценарий оболочки, который перебирает набор переменных, построчно редактирует исходный файл в соответствии с текущим значением итерации, затем переделывает и, наконец, вызывает только что скомпилированный двоичный файл. После исполнения старая строка восстанавливается.

Вот фрагмент:

#!/bin/sh
for i in 0..4; do
    perl -i -pe "s/.*/{SUBS[$i]}/ if $. == ${LINE[$i]}" ${SOURCE}
    make
    ./bin/myTool
    perl -i -pe "s/.*/\/\/{SUBS[$i]}/ if $. == ${LINE[$i]}" ${SOURCE}
done

В основном у меня есть около 10 взаимоисключающих #define в исходном файле C ++, и я экспериментирую с каждым из них. Поскольку я ленивый, я хотел бы сделать это автоматизированным процессом, и вот я застрял.

Иногда бывает, что оболочка говорит:

`make: Nothing to be done for 'all'`

Теперь я попытался diff файл до и после каждой инструкции perl, и файлы отображаются правильно ... Я не могу понять, почему это происходит и как заставить его вести себя правильно.

Есть идеи?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

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

1 голос
/ 20 ноября 2010

Только проверяет, является ли целевая временная метка моложе, чем исходная временная метка. Это единственный способ узнать, что нужно обновить. Так что, если вы выполняете итерации цикла менее чем за секунду, make не будет знать, что что-то изменилось.

Вы можете очистить в начале каждой итерации или добавить задержку, как заметил Игнасио Васкес-Абрамс.

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