概要 | |
---|---|
目的 | C言語練習環境の作成 |
参考 | - Using C++ on Linux in VS Code - VS Codeユーザーガイド |
1. 前提環境
項目 | 説明 |
---|---|
OS | Ubuntu 20.04.1 LTS |
コンパイラ | GCC |
ビルド管理ツール | CMake |
Debugger | GDB |
Text Editor | Visual Studio Code |
2. プログラムの作成とコンパイル
プログラム作成から実行までの流れは以下のようになります:
- エディタでプログラムを作成し、ソースファイルを保存する
- ソースファイルをコンパイルし、オブジェクトファイルを作成する
- オブジェクトファイルを実行する
プログラムのどこかに間違いがあると、コンパイル時に「構文エラー」というメッセージが返されるときがあります。多くのコンパイラはエラーだけでなく「警告」も表示します。コンパイルが通ったとしても警告が表示されるケースは多々あります。理想は警告フリーなソースコードを作成することですが、現実問題としてどの警告を修正するかの取捨選択が重要な作業となります。
コンパイルの例
./src/
ディレクトリに以下の簡単なプログラムを保存しました。
20210104_compile_test_0.c
1
2
3
4
5
6
7
#include <stdio.h>
int main(void)
{
printf("Hallo World!");
return 0;
}
20210104_compile_test_02.c
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main(void)
{
printf("This ");
printf("is ");
printf("C program");
return 0;
}
これらをGCCでコンパイルします。
1
2
% gcc ./src/20210104_compile_test_01.c -o ./build/20210104_compile_test_01.o
% gcc ./src/20210104_compile_test_02.c -o ./build/20210104_compile_test_02.o
それぞれのファイルを実行すると以下のような結果が得られます。
1
2
3
4
% ./build/20210104_compile_test_01.o
Hallo World!
% ./build/20210104_compile_test_02.o
This is C program%
3. C言語 on Ubuntu in VS Code
技術スタック
項目 | |
---|---|
開発環境 | VS Code |
C compiler | gcc |
debugger | GDB |
VS Code Extension: Intelisense, Debugger | C++ extension for VS Code |
VS Code Extension: Running code | Code Runner |
VS Code workspaceを活用する
まず、C_LANGUAGE
というディレクトリを作成し、workspaceとして開きます。
1
2
3
% mkdir C_LANGUAGE
% cd C_LANGUAGE
% code .
なお、C_LANGUAGEというディレクトリの構成は以下のようにします。
1
2
3
4
5
6
C_LANGUAGE
├ .vs_code: config filesが入っています
├ markdown: markdown files
├ src : source codeを格納
├ build : 実行ファイルを格納
└ test : test codeを格納
Build halloworld.c
まず halloworld.c
ファイルを作成します。
1
2
3
4
5
6
7
#include <stdio.h>
int main(void)
{
printf("Hallo World!");
return 0;
}
このファイルをVS CodeからBuildすることを目指します。まずメインメニューから Terminal > Configure Default Build Task.
を選択します。そして、compilerが複数出てくるので適切なものを選択します。すると.vscode
folderにcompiler build settingsを記述したtasks.json
というファイルが作成されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc build active file",
"command": "/usr/bin/gcc",
"args": [
"-g",
"${file}",
"-o",
"${workspaceFolder}/build/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/gcc"
}
]
}
tasks.json
の設定項目
項目 | 説明 |
---|---|
command |
実行するプログラムを指定します。今回は、"/usr/bin/gcc" |
args |
gccに渡されるコマンドライン引数を指定します。 |
${file} |
コンパイル対象のファイル |
${fileDirname} |
コンパイル対象のファイルと同じ名前の実行ファイルを作成します |
${workspaceFolder} |
/home/your-username/your-project |
${fileBasenameNoExtension} |
Extensionを指定 |
"isDefault": true |
Ctrl+Shift+B でrunができるようになります |
Debug helloworld.c
GDB debuggerをローンチするために必要なlaunch.json
ファイルを設定します。まずメインメニューから Run > Add Configuration
を選択し、C++ (GDB/LLDB)
をクリックします。
するとVS Codeでlaunch.json
ファイルが立ち上がります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
program
はdebug対象となるファイルを指定します。デフォルトでは、C 拡張機能はソースコードにブレークポイントを追加せず、stopAtEntry の値は false に設定されています。stopAtEntry の値を true に変更すると、デバッグを開始するときにdebuggerがmain methodで停止します。Debugを実行したい場合はソースコードを開いた状態でF5
クリックします。
Code Runnerの設定
VS Codeで編集したC言語のソースコードをショートカット入力だけでTerminal上で実行したいのでVS Code ExtensionのCode Runnerをインストールします。ソースコードを開いた状態でCtrl+Alt+N
を入力するとTerminal上でコンパイルと実行を同時にすることができます。
Configuration
VS Code setting jsonでPATHを設定します。PATHを設定するにあたってのルールは以下を参照してください。
$workspaceRoot: The path of the folder opened in VS Code
$dir: The directory of the code file being run
$dirWithoutTrailingSlash: The directory of the code file being run without a trailing slash
$fullFileName: The full name of the code file being run
$fileName: The base name of the code file being run, that is the file without the directory
$fileNameWithoutExt: The base name of the code file being run without its extension
$driveLetter: The drive letter of the code file being run (Windows only)
$pythonPath: The path of Python interpreter (set by Python: Select Interpreter command)
これを参考にして、Workspace上に存在する.vscode/
フォルダの下にsettings.json
をつくります。Globalで定義されているsettings.json
をベースに以下の行を追加します。
"code-runner.clearPreviousOutput": true,
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"c": "gcc $workspaceRoot/src/$fileName -o $workspaceRoot/build/$fileNameWithoutExt && $workspaceRoot/build/$fileNameWithoutExt"
}
(注意:GitHub Accountが必要となります)