我正在使用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?
答案 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