GNU Make для создания файлов, которые устарели и новее определенной временной метки - PullRequest
4 голосов
/ 22 февраля 2012

Я использую GNU Make 3.81 для сборки данного C-проекта.Нормальным поведением GNU является проверка того, что цель существует и какое-либо предварительное условие новее целевого, выполняются целевые команды.

Возможно ли восстановить цель, если предварительные условия новее, чем цель Иновее, чем данная отметка времени?Допустим, он собирается только в том случае, если файлы новее, чем 2 октября 2011 г., например.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Нет способа сделать это напрямую с помощью make, но вы можете сделать это с помощью оболочки в действии для правила:

target: prereq
        touch --date='Oct 2, 2011' .timestamp
        if [ $< -nt .timestamp ]; then         \
            command to rebuild target;        \
        fi

Обратите внимание на использование \, чтобы сделать команду if отдельной командой. Вы также можете использовать else, чтобы справиться со случаем, когда цель устарела, а предварительное требование также устарело.

0 голосов
/ 22 февраля 2012

make переделает все цели, которые новее любых его предпосылок, поэтому ваше и условие будет сложно реализовать.

Еслиесли вы хотите ввести эпоху в свой каталог сборки, вы можете просто установить метки времени модификации всех файлов на время эпохи с помощью touch -d.Не красивое, но рабочее решение.

...