如何在makefile中创建目录

时间:2009-03-16 23:28:36

标签: visual-c++ makefile nmake

我正在使用Visual Studio 2005 nmake,我有一个像这样的测试makefile:

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 [] stuff?

5 个答案:

答案 0 :(得分:9)

我认为这会奏效:

 -@ if NOT EXIST "dir" mkdir "dir"

答案 1 :(得分:8)

让总是想要根据目标做事。它不是一般的脚本工具。它查看目标并检查它们是否存在。如果目标不存在,则执行该目标的命令。

执行此操作的常用方法是创建一个永远不会由make脚本生成的虚拟目标,因此每次make运行时都必须执行相关命令。

或者,您可以将命令添加到批处理文件中,然后调用您的make文件。

答案 2 :(得分:3)

我不确定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具有相同的功能。

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

尝试使用:

-mkdir -p c:\testdir