LoginSignup
39
53

More than 5 years have passed since last update.

VSCodeとCMake(とMinGW) でC開発環境をお手軽に構築する

Last updated at Posted at 2018-03-21

はじめに

VisualStudio Code(VSCode)とgccによるC/C++開発環境をお手軽に構築します。

CMakeの使い方(その1)の記事を読ませていただき、CMakeデビューしようと思ったのですが、そもそも通常のC開発環境がないことに気付いたので、さっと用意した時の作業メモです。
(前半はCMake関係なく、通常のC開発環境構築についてです)

環境

  • Windows10 64-bit
  • VisualStudio Code(VSCode)
  • MSYS2 MinGW 64-bit

方針

  • とにかくお手軽にやる
    • ターミナル操作と組み合わせる
    • タスクランナーを使い、全部VSCode上から操作することもできるが、面倒なのでやらない
    • (ランナー用の設定ファイルやバッチファイルを書くくらいなら、ターミナルでコマンド打った方が早くない? という考え。特に、色々なプロジェクトを作ったり消したりするときは)

準備

MSYS2 MinGW64の準備

  • MSYS2をインストールする (https://msys2.github.io/)
  • スタートメニューに作られたMSYS2 MinGW 64-bit (C:\msys64\msys2_shell.cmd -mingw64)を開く
  • 言語を英語にしておく (お好みで)

    • ~/.bashrcに以下を追加
     export LC_ALL=en_US.UTF-8
     export LANG=en_US.UTF-8
     export LANGUAGE=en_US.UTF-8
    
  • 開発環境一式をインストールする

     pacman -Syuu
     pacman -S base-devel
     pacman -S mingw-w64-x86_64-toolchain
     pacman -S mingw64/mingw-w64-x86_64-cmake`
    

VSCodeの準備

  • Extensionsから、C/C++用Extension(ms-vscode.cpptools)を追加する

C/C++プロジェクトを開発する

プロジェクト用フォルダを用意する

プロジェクト構成
project1/
    - main.cpp
main.cpp
#include <stdio.h>
int main()
{
    printf("Hello\n");
}

↑のようなフォルダを、今回はc:\project1に作ります。
このproject1フォルダをVSCodeで開きます。

インクルードパスを修正する

VSCodeは、デフォルトでC/C++のヘッダファイル用パスを良い感じに設定してくれます。が、今回はMinGWのgccを使うので、そっちを参照するようにします。
(注:この作業はコンパイルには影響しません。エディタ上での「定義へジャンプ」などに影響します)

  • #include <stdio.h>の所に、緑の波線と電球アイコンがあったら、電球マーク上にマウスカーソルを持っていき、"Edit "includePath setting"をクリック
    • もしも出なかったら、ありえないヘッダファイルをインクルードしようとして、電球マークアイコンを出す。後でこれは消す。
      • 例えば、#include <aaa.h>

image.png

開かれたc_cpp_properties.jsonのWindows用設定内の、includePathpathを以下のように編集する。
これによって、「定義へ移動」などしたときに、正しいヘッダに飛んでくれます。必要に応じて、適宜追加修正してください。

c_cpp_properties.json
...略...
        {
            "name": "Win32",
            "includePath": [       ↓編集↓
                "C:/msys64/mingw64/include/c++/6.2.0",
                "C:/msys64/mingw64/x86_64-w64-mingw32/include",
                "${workspaceRoot}"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "msvc-x64",
            "browse": {
                "path": [       ↓編集↓
                    "C:/msys64/mingw64/include/c++/6.2.0",
                    "C:/msys64/mingw64/x86_64-w64-mingw32/include",
                    "${workspaceRoot}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
...略...

インクルードパスの調べ方

MinGW上でgccでビルドするときに、-Hオプションを付けて、どのヘッダがインクルードされているかを表示させることで、確認できます。
g++ main.cpp -H

手動でビルド&実行

MSYS2_MinGW64ターミナル
cd /c/project1
g++ -g3 main.cpp
./a.exe

とりあえず、最低限のC/C++コードの実装と実行はここまでの手順でできます。

VSCodeからデバッグする

image.png

VSCode上でF5キーを押し、C++(GDB/LLDB)を選びます
自動で開かれるlaunch.jsonの"program""miDebuggerPath"を以下のように編集します。パスは環境に応じて適宜置き換えてください。

launch.json
...略...
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/a.exe",    ←編集
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe",    ←編集
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
...略...

もう一度F5キーを押すことでデバッグできます。ブレークポイントの設定やブレーク中に変数を見ることもできます。

ここまでで、C/C++のコードを書いて、手動でビルドして、VSCode上でGUIデバッグができるようになりました。

CMakeでビルドする

自分でコマンドを書いたり、Makefileを作ってビルドしてもいいのですが、CMakeを使ってみます。
下記のように、CMakeLists.txtを用意します。

project1/
    - main.cpp
    - CMakeLists.txt
CMakeLists.txt
project(Project1 CXX)

set(CMAKE_CXX_FLAGS "-std=c++11 -Wall")
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O0 -pg")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -s")

add_executable(project1 main.cpp)

MinGWのターミナルから、ビルドします。注意点は-G "MSYS Makefilesを付ける点です。

MSYS2_MinGW64ターミナル
mkdir build && cd build
cmake .. -G "MSYS Makefiles"
make
./project1.exe
その他コマンド
cmake .. -G "MSYS Makefiles"
cmake .. -G "Unix Makefiles"     # これでも同じかも

cmake .. -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release    # リリース設定用Makefileを生成
cmake .. -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug      # デバッグ設定用Makefileを生成

VSCodeからデバッグするには、以下のようにします

  • cmakeコマンドは、cmake .. -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debugにする
  • launch.jsonの"program""program": "${workspaceFolder}/build/project1.exe",に変更する

Linuxの場合は?

手順的には全く同じです。
MinGW関係のインストールが不要です。また、gdbなどのパスの指定も、標準のものを使うのであれば、コマンド名(gdb)だけでOKです。

39
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
53