Это сделало бы это - предполагая среду, подобную Unix.
MKDIR_P = mkdir -p
.PHONY: directories
all: directories program
directories: ${OUT_DIR}
${OUT_DIR}:
${MKDIR_P} ${OUT_DIR}
Это должно быть запущено в каталоге верхнего уровня - или определение $ {OUT_DIR} должно быть правильно относительно того, где он запускается. Конечно, если вы будете следовать указателям статьи « Recursive Make Considered Harmful » Питера Миллера, вы все равно будете запускать make в каталоге верхнего уровня.
I ' m играл с этим (RMCH) на данный момент. Это потребовало некоторой адаптации к набору программного обеспечения, которое я использую в качестве площадки для тестирования. В пакете есть дюжина отдельных программ, построенных с распространением источника по 15 каталогам, часть из которых разделена. Но с небольшой осторожностью это можно сделать. OTOH, это может быть неприемлемо для новичков.
Как отмечено в комментариях, перечисление команды «mkdir» как действие для «каталогов» неверно. Как также отмечено в комментариях, есть другие способы исправить ошибку «не знаю, как сделать вывод / отладочную ошибку». Один из них - удалить зависимость от линии «каталогов». Это работает, потому что «mkdir -p» не генерирует ошибок, если все каталоги, которые его просят создать, уже существуют. Другой показан механизм, который будет пытаться создать каталог, если он не существует. Версия «с поправками» - это то, что я имел в виду прошлой ночью, - но обе эти методы работают (и у обоих есть проблемы, если существует выход / debug, но это файл, а не каталог).
В Python 3.x вы можете использовать декларацию nonlocal
(в nested
), чтобы сообщить Python, что вы хотите присвоить переменной count
в nesting
.
В Python 2.x вы просто не можете назначить count
в nesting
из nested
. Тем не менее, вы можете обойти это, не присваивая переменной переменную, а используя изменяемый контейнер:
def nesting():
count = [0]
def nested():
count[0] += 1
for i in range(10):
nested()
print count[0]
Хотя для нетривиальных случаев, обычный подход Python заключается в переносе данные и функциональность в классе, а не с использованием замыканий.
Самый элегантный подход для меня: 100% работает на обеих версиях Python.
def ex8():
ex8.var = 'foo'
def inner():
ex8.var = 'bar'
print 'inside inner, ex8.var is ', ex8.var
inner()
print 'inside outer function, ex8.var is ', ex8.var
ex8()
inside inner, ex8.var is bar
inside outer function, ex8.var is bar
Подробнее: http://www.saltycrane.com/blog/2008/01/python-variable-scope-notes/