Как мне создать каталог в make-файле - PullRequest
4 голосов
/ 17 марта 2009

Я использую Visual Studio 2005 nmake, и у меня есть тестовый make-файл, подобный этому:

sometarget:
    -mkdir c:\testdir

Я хочу всегда создавать каталог без указания 'sometarget'. Например, я могу сделать это:

!if [if not exist c:\testdir\$(null) mkdir c:\testdir]
!endif

Но для этого нужны две строки, где я действительно хочу сделать только "-mkdir c: \ testdir". Если я просто заменяю его на «-mkdir c: \ testdir», я получаю ошибку от nmake - «фатальная ошибка U1034: синтаксическая ошибка: разделитель отсутствует».

Как я всегда могу выполнить mkdir, не беспокоясь о! If [] вещи?

Ответы [ 5 ]

9 голосов
/ 17 марта 2009

Я думаю, что это будет работать:

 -@ if NOT EXIST "dir" mkdir "dir"
8 голосов
/ 17 марта 2009

Make всегда хочет делать вещи, основываясь на целях. Это не общий инструмент написания сценариев. Он смотрит на цели и проверяет, существуют ли они. Если цель не существует, она выполняет команды для этой цели.

Обычный способ сделать это - создать фиктивную цель, которая никогда не будет генерироваться скриптами make, поэтому при каждом запуске make она должна выполнять соответствующие команды.

Или вы можете добавить команду в командный файл, который затем вызывает ваш файл make.

3 голосов
/ 24 марта 2011

Я не уверен, что в Windows есть эквивалент с nmake, но мне удалось создать каталог без использования целей в Linux. Я использовал функцию make "shell". Например:

# Find where we are
TOPDIR := $(shell pwd)
# Define destination directory
ROOTFS := $(TOPDIR)/rootfs
# Make sure destination directory exists before invoking any tags
$(shell [ -d "$(ROOTFS)" ] || mkdir -p $(ROOTFS))

all:
    @if [ -d "$(ROOTFS)" ]; then echo "Cool!"; else echo "Darn!"; fi

Надеюсь, у Windows есть аналог.

0 голосов
/ 20 апреля 2010

$(DIRNAME): @[ -d $@ ] || mkdir -p $@

0 голосов
/ 20 апреля 2010

Попробуйте использовать это:

-mkdir -p c:\testdir
...