make
внутри и сам по себе обрабатывает цели каталога так же, как и целевые файлы. Таким образом, легко написать такие правила:
outDir/someTarget: Makefile outDir
touch outDir/someTarget
outDir:
mkdir -p outDir
Единственная проблема заключается в том, что временная метка каталогов зависит от того, что делается с файлами внутри. Для приведенных выше правил это приводит к следующему результату:
$ make
mkdir -p outDir
touch outDir/someTarget
$ make
touch outDir/someTarget
$ make
touch outDir/someTarget
$ make
touch outDir/someTarget
Это определенно не то, что вы хотите. Всякий раз, когда вы касаетесь файла, вы также прикасаетесь к каталогу. И поскольку файл зависит от каталога, файл, следовательно, выглядит устаревшим, заставляя его перестраивать.
Однако вы можете легко разбить этот цикл, указав make, чтобы игнорировать временную метку каталога , Это делается путем объявления каталога как только prerqusite для заказа:
# The pipe symbol tells make that the following prerequisites are order-only
# |
# v
outDir/someTarget: Makefile | outDir
touch outDir/someTarget
outDir:
mkdir -p outDir
Это правильно дает:
$ make
mkdir -p outDir
touch outDir/someTarget
$ make
make: 'outDir/someTarget' is up to date.
TL; DR:
Напишите правило для создания каталога:
$(OUT_DIR):
mkdir -p $(OUT_DIR)
И цели для содержимого внутри зависят от каталога только для заказа:
$(OUT_DIR)/someTarget: ... | $(OUT_DIR)
Вы хотите передать данные в формате JSON. Вы передаете объект Javascript. JSON - это способ сериализации объектов Javascript в строки, чтобы их можно было передавать без проблем совместимости.
Вы действительно хотите передать JSON в строку:
$.ajax({
url: myUrl,
type: "POST",
data: '{"foo": "bar"}',
processData: false,
contentType: 'application/json'
});