2017-06-22 8 views
-1

MSYS2シェルでmingwでコンパイルしたCプログラムをテストするときに問題が発生しました。ウィンドウコンベンション(/で始まる)に従ってオプションを受け入れるコマンドラインパーサを作成しました。私は、出力ファイルを生成するには、このように私のプログラムを呼び出す場合:argv[1]で終わる何MSYS2:ドライブ名へのパス名の自動変換を無効にするにはどうすればよいですか?

./example.exe /o test 

は実際にO:/です。 CMD.EXEを実行しているコンソールウィンドウからテストするとうまく動作します。これ、本当に最小限のプログラムが動作を示しています

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    if (argc > 1) 
    { 
     puts(argv[1]); 
    } 
    return 0; 
} 
$ ./example.exe /o 
O:/ 

だから私は、これはMSYS2シェルが参考になろうと、ドライブ文字の構文にルートの下に一文字パスのようなものを交換だと思います。この動作を無効にする方法はありますか?テストのために常にCMD.EXEを起動するのはちょっと面倒です。

+0

はあなたがエスケープまたはティックで囲んてみました/ '" ' – Olaf

+0

@Olaf MSYS2は、開発環境では* Cと親指のルールがある*用* 1です*言語タグはほぼ常に適切です!Cコードをビルドするための 'clang'や' Makefile'のコマンドライン引数に関する質問と同じことです。もちろん、*明白なことを試しました! –

+0

@Olafとマイグレーションの投票も間違っています。特に、「プログラマーがよく使用するソフトウェアツール*」 –

答えて

1

この現象を無効にするには、MSYS2_ARG_CONV_EXCL環境変数を使用できます。たとえば、実行してみてください:?Cに関連していない

MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test 
+0

偉大な、問題を解決します、ありがとう。この環境変数の内容を説明するリソースがありますか? –

+0

私は現時点でそれを見つけることができませんが、基本的には、いくつかの区切り文字で区切られた引数接頭辞のリストです。 –

+0

さて、私はそれを自分で探し、その間に名前を覚えています:) –

関連する問題