Как передать make
, что скрипт может условно изменить файл, так что make
ждет до stat
всех файлов, пока этот скрипт не завершится?makefile с условно сгенерированным файлом
Рассмотрим следующий пример игрушечный ряд файлов:
// version
2
// foo.h - note the space between the 1 and the semicolon
static constexpr int VERSION = 1 ;
//update.py
import sys
with open(sys.argv[1]) as f:
cur = int(f.readlines()[0].split()[5])
with open('version') as f:
exp = int(f.readlines()[0].strip())
if cur < exp:
with open(sys.argv[1], 'w') as f:
print >> f, 'static constexpr int VERSION = {} ;'.format(exp)
// main.cxx
#include "foo.h"
#include <iostream>
int main() {
std::cout << VERSION << std::endl;
}
// makefile
all : a.out updater
a.out : main.o
g++ -o a.out main.o
main.o : main.cxx
g++ -std=c++11 -o main.o -c main.cxx -MP -MMD -MF main.d
.PHONY : updater
updater :
python update.py foo.h
-include main.d
Намерение здесь является то, что у меня есть файл, foo.h
, который условно обновляется с помощью сценария, update.py
(если увеличить число в version
, foo.h
будет обновляться - иначе ничего не произойдет). Я хотел бы передать это понятие make
как-то - это не stat
foo.h
, чтобы определить, нужно ли его переделать main.o
до update.py
заканчивается. Как я могу обеспечить заказ?
Примечание: version
здесь просто заполнитель для сложной серии предпосылок, которые нелегко выразить. Просто добавление foo.h : version
не является решением проблемы.
'foo.h: updater' возможно? Или даже просто сделайте рецепт для 'updater' рецепта для' foo.h'. – user657267
@ user657267 Это не работает. – Barry
Извините, что я ошибался в том, чтобы переместить рецепт на 'foo.h', но создав' foo.h' цель 'main.o' и' updater', цель 'foo.h' должна работать. – user657267