Visual c++ 如何在makefile中创建目录

Visual c++ 如何在makefile中创建目录,visual-c++,makefile,nmake,Visual C++,Makefile,Nmake,我使用的是Visual Studio 2005 nmake,我有一个测试生成文件,如下所示: sometarget: -mkdir c:\testdir 我希望始终创建目录,而不必指定“sometarget”。例如,我可以这样做: !if [if not exist c:\testdir\$(null) mkdir c:\testdir] !endif 但这需要两行代码,其中我只想执行“-mkdir c:\testdir”。如果我只是用“-mkdir c:\testdir”替换它,我

我使用的是Visual Studio 2005 nmake,我有一个测试生成文件,如下所示:

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,而不去胡闹!如果[]东西?

Make总是想根据目标做事情。它不是一个通用的脚本工具。它查看目标并检查它们是否存在。如果目标不存在,它将执行该目标的命令

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


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

我认为这会奏效:

 -@ if NOT EXIST "dir" mkdir "dir"
尝试使用以下方法:

-mkdir -p c:\testdir
$(DIRNAME):

@[-d$@]| | mkdir-p$@

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

谢谢!这正是我所需要的。这在Windows7上对我有效,正是我所需要的。