2016-04-04 12 views
-2

画像を見ると、Windows 10のcプロジェクトのMakefileにフォルダを作成したかったのですが、最後の行で "#"が誤って追加されてしまいました。しかし、最後の行に "#"がなければ動作しません。

次のようにその行がある:

mkdir -p [email protected] 

または

mkdir -p [email protected] # 
  1. なぜそれが "#" なしでは動作しませんか?
  2. Windows 10の下で正しく書き込む方法は?

編集:短い エラーメッセージのエラーメッセージが与えられたファイルを見つけることができないシステムである(それはtranslattion)

making dirs.... 
build/ 
mkdir -p build/ 
Makefile:293: recipe for target 'build/' failed 
process_begin: CreateProcess(NULL, mkdir -p build/, ...) failed. 
make (e=2): Das System kann die angegebene Datei nicht finden. 

make: *** [build/] Error 2 

編集:

を次のように私は、テキスト内のコードを追加します
#Create non existing dirs 
OBJDIRS = $(sort $(dir $(OBJS))) #sort removes duplicate dirs... 
$(OBJDIRS): 
    @echo 
    @echo "making dirs...." 
    @echo [email protected] 
    mkdir -p [email protected] #ok 
+2

「動作しない」とは、具体的に説明してください。つまり、期待される動作と実際の動作を記述します。また、画像をテキストとして使用しないでください。テキストを質問に直接テキストとしてコピーします。 – kaylum

+1

'mkdir -p'はU \ * xコマンドです。 'cmd/c start notepad.exe'のように、Windows以外のプラットフォームでは何の役にも立たないように、U \ * xのユーザランド(cygwin、Bashなど)を持っていないと、うまく動作しません。 – tripleee

+0

kaylum。それはエラーを解釈してそこで停止するという意味では機能しません。 –

答えて

0

mkdir-pパラメータが不要なので、削除してください。また、スラッシュの代わりにバックスラッシュが必要です。

だから、あなたの現在のmkdirの代わりに使用する必要がコマンドは次のとおりです。

mkdir $(subst /,\,[email protected]) 

編集:CMDコマンド拡張機能はデフォルトでは無効になっていそうにない場合には

、あなたの代わりにこのコマンドを使用する必要があります:

+0

ありがとう、私は両方を試みました。しかし、それらの仕事のどれも!また、i686-w64-mingw32用のGNU Make 4.1ビルドを使用しています。 –

+0

@Jay S 'gmake:Interrupt/Exception caught(code = 0xc0000005、addr = 0x000007FEFEF82020)'のような面白いエラーが出ますか? – jdarthenay

+0

#をつけて、それは完全に働く。 –

0

私はまったく同じ問題を抱えていましたが、一時的な解決策に感謝しました。しかし、私はもう少し周りを掘って、少なくとも部分的に何が起こっているかを考え出した。あなたは

make --debug=j 

を実行した場合、あなたは#文字を追加するとき、makeが実際に

mkdir _build # 
CreateProcess(NULL,C:/Program Files/GNU ARM Eclipse/Build Tools/2.6-201507152002/bin/sh.exe -c "mkdir _build #",...) 

を実行mkdirは、実際の実行可能ではないとして、それは実際には、これだけが動作することを意味をしなければならないことがわかりますウィンドウではなく、ウィンドウシェル内でのみ解釈されるコマンド。私はmake(Win32用)のソースコードを掘り下げてしまい、shを経由するコマンドと、プロセスとして起動しようとするコマンドを決定するためのハードコーディングされたロジックがかなりあるように見えます。 #シンボルがどのユースケースによって突然、mkdirをプロセスに起動するのではなく、シェルに送り込むことにしたのかを知ることはできませんでしたが、これを「正しく」実行するための3つのオプションがあります。

1)実行可能ファイルmkdirをCoreUtils for Windowsのものと同じように使用してください。http://gnuwin32.sourceforge.net/packages/coreutils.htm。もちろんそれがあなたの道にあることを確認してください。

2)mkdirコマンドをcmd /c "mkdir [email protected]"に変更します。これにより、Windowsのネイティブコマンドハンドラにmkdirが供給されます。私の場合、-pフラグは使用していませんので、Windows mkdirと互換性がありますが、-pはネイティブWindowsシェルではサポートされていないため、より強力なシェル(sh)を使用するか、 #1を参照してください。

3)makeのソースコードを読んで、この動作に何らかの理由があるのか​​、それともバグなのか確認してください。私はマニュアルを検索しましたが、あなたのコマンドをシェルに送信したりプロセスとして開くことの本質が文書化されているとは思いません。