C++をWindows コマンドプロンプトでコンパイル

普段自宅ではMACBOOKで作業をしていますが、出張ででかけているときはWindowsを使っています。AOJでC++の問題を解くのに、Visual StudioのIDEをひらいてやってたこともあるのですが、プロジェクトを作って大掛かりになってしまうので、簡単にコマンドプロンプト(cmd)でやる方法をまとめます。

まず、コマンドプロンプトでコンパイルする場合はcl.exeを使います。これを直接実行すると、インクルードパスが設定されていません。と表示され実行っできません。

>cl main.cpp

Microsoft(R) C/C++ Optimizing Compiler Version 19.16.27030.1 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.
main.cpp
main.cpp(2): fatal error C1034: iostream: インクルード パスが設定されていません。

通常はスタートメニューから、「開発者コマンド プロンプト for VS 2017」を起動し実行します。 しかし、ディレクトリーに移動するのが非常に面倒です。

「開発者コマンド プロンプト for VS 2017」をプロパティで確認すると、

%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"

コマンドプロンプトでフォルダを指定して開く簡単な方法は、エクスプローラのアドレスバーにcmdと入力することです。そこで、上記で確認したコマンドを入力すると、コマンドプロンプトがコンパイル実行可能状態になります。

C:\Users\username\Documents\C\projects\helloworld>%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.11
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************

cl.exeでは/EHscオプションをつけて実行します。

C:\Users\username\Documents\C\projects\helloworld>cl /EHsc main.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.16.27030.1 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.
main.cpp
Microsoft (R) Incremental Linker Version 14.16.27030.1
Copyright (C) Microsoft Corporation.  All rights reserved.
/out:main.exe
main.obj

プログラム実行は、exeファイルを入力するだけ。今回はmain.exeができあがったので下記のようになります。

C:\Users\username\Documents\C\projects\helloworld>main.exe
Hello C++ World

Visual studio codeでターミナルでやるだけなら上記のやりかたで問題ありません。もしTaskで実行する場合は、実行毎に新規ターミナルが起動するのでできません。その場合は、Visual studio codeを一度閉じて、コマンドプロンプトで%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"を実行してからcode .と入力すると、Taskも実行できるようになります。フォルダも選択した状態で起動するので非常に便利です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です