初めまして!!ノベルワークス入社2年目、プログラム初心者のそうまです!!
今回はC++
の実行環境をMacで構築した際に、予想以上に詰まったので記録として残そうと思います!
エディタはVSCode
を使います!
何故 C++
なのか
僕は普段からjavascript
しか触っておらず、高級言語が故に裏でめんどくさい事はなんでも肩代わりしてくれるせいで、メモリや実行環境といった低レベルな部分を全く気にせずここまで生きてきてしまいました。
そこで、javascript
よりも低級な言語をやってみて知識を蓄えようと思ったのですが、同時に「どの言語を学ぶべきか」や「ただ言語の勉強をするだけではモチベーションが続かない」 とも考えていました。
そんな中で、この「ゲーム開発で学ぶC言語入門 プロのクリエイターが教える基本文法と開発技法」という本に出会い、これなら楽しみながら学べそうだと思い、C++
を選ぶことにしました。
第一の壁 コンパイラ
まず「コンパイルとは何か?」ですが、プログラミング言語におけるコンパイルとは、人間が理解しやすい形式で書かれたコードを、コンピュータが実行できる機械語へと変換するプロセスを指します。
で、まずどのコンパイラを用いてC++
で書いたコードをコンパイルするのかを決めるとこから始まったのですが、前提として "コンパイラを選ぶ" というステップに遭遇する事自体が初めてで普通に混乱しました、この時点で「C++ コンパイラ 種類」とか調べて既に時間を食っています。
今回はコンパイラにclang++
を選びました!Copilot
に聞いた所「Macではこちらの方が一般的」と教えてくれたからです(ここら辺の理由とかコンパイラの違いはまた別機会に調べようと思います)
こちらのコンパイラですが、以下のコマンドでインストール出来るみたいなので早速試してみました。
xcode-select --install
xcode-selectとは
Appleが提供する統合開発環境(IDE)であるXcodeのコマンドラインツールを管理するためのコマンドです。
すると以下のエラーが出現。
command not found: xcode
どうやら、Homebrew
のインストールに問題があるみたいなので、解決するために以下のコマンドを入力。
brew doctor
再度 xcode-select --install
する事で無事にコンパイラをインストール出来ました!
このコンパイラを使用して C++
のコードをコンパイルするタスクを VScode
に以下のように設定しました!
VScodeのタスク機能
特定のコマンドやスクリプトを事前に設定ファイル(tasks.json)に登録しておく事で、ターミナルに手動でコマンドを入力しなくても簡単に実行出来る機能の事。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "c++_build",
// 今回はC++のコンパイラを指定、gccかclang++か
"command": "clang++",
"args": [
"-g",
// コンパイルするファイルを指定、今回だと実行したファイル名が入る
"${file}",
// コンパイルしたファイルの名前を指定
"-o",
"${fileDirname}/build.out"
],
// タスクのグループを指定
"group": "build",
"presentation": {
"reveal": "never"
}
}
]
}
タスクの設定については以下の記事を参考にしました!ありがとうございました!
第二の壁 デバッガー
次に開発では必須となるデバッガーを入れていきます。デバッガーとは、コードの実行を細かく制御しプログラムの挙動を詳細に分析出来るツールです。
こんな感じのやつ
デバッガーを入れる事も今回初めてだったのでかなり苦戦しました。特に「デバッガーをインストールする必要がある」という事を理解するまでに時間がかかりました...(コンパイラがあれば全部出来ると思ってた)
今回は lldb
を使います!VScode
の拡張機能に CodeLLDB
が存在するのでインストールし、VScode
のデバッグ構成に以下を追加します!
VScodeのデバッグ設定
デバッグ構成を設定ファイル(launch.json) に記述する事で、デバッグの構成を作成・追加する事が出来る。
{
"version": "0.2.0",
"configurations": [
{
// デバッグの名前を指定
"name": "c++_debug",
// デバッガーの指定、今回はlldbを指定
"type": "lldb",
"request": "launch",
// デバッグするファイルを指定、タスクでコンパイルしたファイルを指定
"program": "${fileDirname}/build.out",
"args": [""],
"cwd": "${fileDirname}",
"preLaunchTask": "c++_build",
}
]
}
こちらも以下の記事を参考にしました!!ありがとうございました!!
デバッグの起動構成について
最後に
コンパイルしたコードの実行タスクを以下のように設定して、構築完了です!
{
// コンパイルしたファイルを実行するタスク
"type": "shell",
"label": "c++_run",
"command": "${fileDirname}/build.out",
"group": "test",
"presentation": {
"reveal": "always",
"panel": "new"
}
}
纏め
まだまだ入り口なのに、コンパイラやらデバッガーやら知らない事が多すぎて自分がいかにjavascript
(というよりブラウザ?)に甘やかされていたかを痛感しています...これから低レベルな知識をしっかり身につけて、少しずつでもエンジニアとして成長していきたいと思います!一歩ずつ着実に頑張ります!