Visual Studio Codeで複数ファイルからなるプログラムをコンパイルする方法についてまとめられている記事がすぐに見つからなくて色々試したので、実行手順をこちらにまとめます。
VS Codeダウンロード
Visual Studio Codeの公式サイトから、使用しているOS(windowsやmacなど)にあったものをダウンロードします。
C++プログラム・コンパイル用拡張機能インストール
「VSCodeでC++デバッグ(Windows)」を参考に
- C/C++
- CMake
- CMake Tools
をインストールしました。
1つのソースファイルのコンパイル
ファイルが1つの場合は、以下のようなファイルを作成して、右上のアイコンからコンパイル・デバッグができます。
#include <stdio.h>
#include <cmath>
#define PI 3.14159265358979
/* X座標を返す */
float X_coordinate(int r, int t)
{
float theta=PI*t/180;
float x=r*std::cos(theta);
return x;
}
/* Y座標を返す */
float Y_coordinate(int r, int t)
{
float theta=PI*t/180;
float y=r*std::sin(theta);
return y;
}
int main(void)
{
int r = 50;
int t = 90;
printf( "X= %f\n", X_coordinate(r,t) );
printf( "Y= %f\n", Y_coordinate(r,t) );
}
実際のプログラム実行やデバッグの画面は以下になります。
複数ファイルからなるプログラムの例
main.cpp以外にも複数ファイルがある場合にはコンパイルを行う場合に、他のファイル(今回はcoordinate.cpp)も参照するように設定する必要があります。以下は今回用いた
- main.cpp
- coordinate.cpp
- coordinate.h
のコードになります。極座標(半径r,角度θ)を直行座標(x,y)に変換する例です。
#include <stdio.h>
#include "coordinate.h"
int main(void)
{
int r = 50;
int t = 90;
printf( "X= %f\n", X_coordinate(r,t) );
printf( "Y= %f\n", Y_coordinate(r,t) );
}
/* X座標を返す */
float X_coordinate(int r, int t);
/* Y座標を返す */
float Y_coordinate(int r, int t);
#include <cmath>
#include "coordinate.h"
#define PI 3.14159265358979
/* X座標を返す */
float X_coordinate(int r, int t)
{
float theta=PI*t/180;
float x=r*std::cos(theta);
return x;
}
/* Y座標を返す */
float Y_coordinate(int r, int t)
{
float theta=PI*t/180;
float y=r*std::sin(theta);
return y;
}
複数ファイルからなるプログラムのコンパイル
ターミナルでコンパイルする方法(g++)
用いているソースファイル(main.cpp,coordinate.cpp)を指定して、実行プログラムmainを作成します。
$ g++ main.cpp coordinate.cpp -o main (あるいはg++ *.cpp -o main)
$ ./main
X= -0.000002
Y= 50.000000
tasks.jsonでコンパイルする方法
右上の三角アイコンを選択し、「Debug C/C++ File」「Run C/C++ File」を選択、デバッグ構成としてC/C++:g++ アクティブファイルのビルドとデバッグ(C++なのでコンパイラは/usr/bin/g++)を選択するとVScode用のビルドタスク設定ファイルtasks.jsonができます。
tasks.jsonでコンパイルするソースファイルを指定します。例えば以下のように${fileDirname}/*.cppをソースファイルとして指定すると、ディレクトリ内の.cppファイルを指定できます。
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ アクティブなファイルのビルド",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${fileDirname}/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "デバッガーによって生成されたタスク。"
}
],
"version": "2.0.0"
}
CMakeLists.txtを用いる方法
tasks.jsonはVScode用のファイルかと思いますが、一般にはCMakeLists.txtで設定します。ソースファイルの階層がある場合は各ディレクトリにCMakeLists.txtを置く必要がありますが、今回の
- main.cpp
- coordinate.cpp
- coordinate.h
3つのファイルの場合には、同じディレクトリにCMakeLists.txtを作成すれば良いです。
# CMakeのバージョンを設定
cmake_minimum_required(VERSION 3.0.0)
# プロジェクト名と使用する言語を設定
project(debug VERSION 0.1.0)
# ファイルを検索し,変数「MY_SOURCE」に設定
file(GLOB MY_SOURCE src/*.h *.cpp)
# 上記で検索したMY_SOURCEから実行ファイルmainを作成
add_executable(main ${MY_SOURCE})
CMakelists.txtでのコンパイルは、私は画面の一番下にあるタブから実行することができました(上図参照)。①から③までのアイコンを操作してデバッグができます。(以下手順)
- デバッグの際には、途中の変数の値を全てチェックしたいのでDebugモードを選択します。(Releaseモードだと最適化が行われて途中の変数の値が見れなくなる場合があります。)
- Buildを実行するbuildディレクトリができて、その中に実行ファイル(今回はmain)が生成されます。
- debugは虫アイコンをクリックすればブレークポイントの位置で止まります。あとはステップ実行などしていきます。
画面右上のアイコンでデバッグした場合にはtasks.jsonが読まれ、画面下部のアイコンでデバッグするとCMakelists.txtが読み込まれます。
コメント