4

Visual Studio 2005 nmakeを使用しており、次のようなテストmakefileがあります。

sometarget:
    -mkdir c:\testdir

'sometarget'を指定せずに、常にディレクトリを作成したいと思います。たとえば、私はこれを行うことができます:

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

ただし、これには2行が必要です。実際には、「-mkdir c:\testdir」のみを実行します。これを「-mkdirc:\ testdir」に置き換えると、nmakeからエラーが発生します-「致命的なエラーU1034:構文エラー:セパレータがありません」。

!if []をいじることなく、常にmkdirを実行するにはどうすればよいですか?

4

5 に答える 5

9

私はこれがうまくいくと思います:

 -@ if NOT EXIST "dir" mkdir "dir"
于 2009-03-17T03:17:56.860 に答える
8

Make は常にターゲットに基づいて物事を行いたいと考えています。これは一般的なスクリプト ツールではありません。ターゲットを調べて、それらが存在するかどうかを確認します。ターゲットが存在しない場合は、そのターゲットのコマンドを実行します。

これを行う通常の方法は、make スクリプトによって生成されることのないダミー ターゲットを用意することです。そのため、make を実行するたびに、関連するコマンドを実行する必要があります。

または、make ファイルを呼び出すバッチ ファイルにコマンドを追加することもできます。

于 2009-03-17T00:36:13.970 に答える
3

Windows に nmake と同等のものがあるかどうかはわかりませんが、Linux ではターゲットを使用せずにディレクトリを作成することができました。make関数「シェル」を使用しました。例えば:

# 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に同等のものがあることを願っています。

于 2011-03-24T17:45:10.330 に答える
0

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

于 2010-04-20T15:05:53.797 に答える
-2

これを使用してみてください:

-mkdir -p c:\testdir
于 2010-04-20T14:47:20.567 に答える