å®éã«çµãã§åããïŒC++ããŒã«ã«éçºç°å¢æ§ç¯ã¬ã€ã
ãVS Code ïŒ CMake ïŒ ã¢ãã³ã³ã³ãã€ã©ã§å§ãã宿©ãã«ãïŒãããã°ã
ãã©ãŠã¶äžã®åŠç¿ããäžæ©èžã¿åºããèªåã®æå
ã®ããœã³ã³ïŒWindows / Mac / LinuxïŒã§C++ã³ãŒããæžããŠã³ã³ãã€ã«ãããã¬ãŒã¯ãã€ã³ããæã£ãŠãããã°å®è¡ãããŸã§ã®å®å
šãªç°å¢æ§ç¯æé ããŒããã解説ããŸãã
1.1 C++éçºã®ã3倧ããŒã«ããçè§£ãã
PythonãNode.jsãšéããC++ã§ã³ãŒããåããã«ã¯ã3ã€ã®ç°ãªãéå
·ããæããå¿
èŠããããŸããããããã®åœ¹å²ãæŽçããŸãããã
ð§ ãã³ã®ã³å
茩
æå°å®ïŒãã©ãŠã¶ã§åãã®ã楜ããã§ããããã£ã±ãèªåã®PCã§ `main.cpp` ãäœã£ãŠåãããŠã¿ããã§ãïŒã§ããã³ã³ãã€ã©ããšããCMakeããšãè²ã
ãã£ãŠäœããå
¥ããã°ããã®ãâŠ
ð»ââïž ã·ãã¯ãå
ç
ããïŒèªåã®PCã§åã㊠`a.out` ã `app.exe` ãåããç¬éã®æåã¯æ Œå¥ããããC++éçºã®éå
·ç«ãŠã¯ããšãã£ã¿ããã³ã³ãã€ã©ãããã«ãããŒã«ïŒCMakeïŒãã®3人è¡ã§æãç«ã£ãŠããããŸãã¯ãã®3è
ã®åœ¹å²ãæŒãããã®ããïŒ
### C++éçºãæ¯ãã3倧ããŒã«
```
[ãœãŒã¹ã³ãŒã (.cpp / .h)]
â
âŒ
1. ãšãã£ã¿ (VS Code) : ã³ãŒããæžããã³ãŒãè£å®ããšã©ãŒè¡šç€º
â
âŒ
2. CMake (ãã«ãããŒã«) : ãã©ã®ãã¡ã€ã«ãã©ãããé ã§ãã«ãããããã®èšèšå³ãäœã
â
âŒ
3. ã³ã³ãã€ã© (MSVC/GCC/Clang) : 人éã®æžããã³ãŒããCPUãçè§£ã§ããæ©æ¢°èªïŒ.exe / ãã€ããªïŒã«å€æ
```
1. **ãšãã£ã¿ / IDEïŒçµ±åéçºç°å¢ïŒ**:
ãããã㯠**Visual Studio Code (VS Code)** ã§ãã軜éã§ãWindows/Mac/Linuxãã¹ãŠã§åãæäœæã§åäœããŸãïŒWindowsãªã **Visual Studio Community** ãå®çªã§ãïŒã
2. **ã³ã³ãã€ã©**:
ãœãŒã¹ã³ãŒãïŒããã¹ãïŒãæ©æ¢°èªïŒãã€ããªïŒã«å€æããããã°ã©ã ãOSããšã«æšæºã³ã³ãã€ã©ãç°ãªããŸãã
- **Windows**: MSVCïŒMicrosoft Visual C++ïŒãŸã㯠MinGW (GCC)
- **Mac**: Apple ClangïŒXcode Command Line ToolsïŒ
- **Linux**: GCCïŒGNU Compiler CollectionïŒãŸã㯠Clang
3. **ãã«ãã·ã¹ãã ïŒCMakeïŒ**:
ãã¡ã€ã«ã10åã20åãšå¢ãããšãã1ã€ãã€ã³ãã³ãã§ã³ã³ãã€ã«ããã®ã¯äžå¯èœã§ããCMakeã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ãã«ããå
šèªååããŠãããäžçæšæºããŒã«ã§ãã
1.2 OSå¥ïŒã³ã³ãã€ã©å°å
¥æé
ãŸãã¯ã䜿ãã®OSã«åãããŠã³ã³ãã€ã©ãã€ã³ã¹ããŒã«ããŸãã以äžã®æé ã«åŸã£ãŠã³ãã³ã1ã€ã§ã»ããã¢ããã§ããŸãã
### â Windows ã®å ŽåïŒæãããããïŒVisual Studio Build ToolsïŒ
1. **Visual Studio Community** ãŸã㯠**Build Tools for Visual Studio** ãå
¬åŒãµã€ãããããŠã³ããŒãããŠå®è¡ããŸãã
2. ã€ã³ã¹ããŒã©ãŒã§ **ãC++ ã«ãããã¹ã¯ãããéçºã** ã«ãã§ãã¯ãå
¥ããŠã€ã³ã¹ããŒã«ããŸãã
- ããã«ãããäžçæé«å³°ã®ã³ã³ãã€ã© `cl.exe` (MSVC) ãšãããã¬ãèªåå°å
¥ãããŸãã
3. ïŒè»œé掟åãä»£æ¿æ¡ïŒ**MSYS2** ãå°å
¥ãã`pacman -S mingw-w64-ucrt-x86_64-gcc` ã§ GCC ãã€ã³ã¹ããŒã«ããéžæè¢ããããŸãã
---
### â¡ Mac ã®å ŽåïŒApple ClangïŒ
ã¿ãŒããã«ãéãã以äžã®ã³ãã³ãã1è¡å®è¡ããã ãã§ãã
```bash
xcode-select --install
```
ãã€ã¢ãã°ã衚瀺ãããããã€ã³ã¹ããŒã«ããã¯ãªãã¯ããŸããå®äºåŸã以äžã®ã³ãã³ãã§ããŒãžã§ã³ãåºãã°æåã§ãã
```bash
clang++ --version
# Apple clang version 15.x.x ... ãšåºãã°OKïŒ
```
---
### ⢠Linux (Ubuntu / Debian) ã®å ŽåïŒGCCïŒ
ã¿ãŒããã«ã§ããã±ãŒãžãããŒãžã£ããäžçºã§å
¥ããŸãã
```bash
sudo apt update
sudo apt install build-essential gdb cmake -y
g++ --version
```
1.3 æšå¥šæ§æïŒVS Code ã®å¿
é æ¡åŒµæ©èœ
VS Codeããæé«å³°ã®C++ IDEãã«åããããããã€ã¯ããœããå
¬åŒã®å¿
é æ¡åŒµæ©èœãå°å
¥ããŸãã
### VS Code ã«ã€ã³ã¹ããŒã«ãã¹ã2ã€ã®æ¡åŒµæ©èœ
VS Code ã®æ¡åŒµæ©èœã¿ãïŒCtrl+Shift+X ãŸã㯠Cmd+Shift+XïŒãéãã以äžãæ€çŽ¢ããŠã€ã³ã¹ããŒã«ããŸãã
1. **`C/C++` (ms-vscode.cpptools)**:
Microsoft謹補ã匷åãªã³ãŒãè£å®ïŒIntelliSenseïŒãå®çŸ©ãžã£ã³ãïŒF12ïŒããããã°ïŒãã¬ãŒã¯ãã€ã³ãïŒãå¯èœã«ããŸãã
2. **`CMake Tools` (ms-vscode.cmake-tools)**:
CMakeLists.txt ãæ€ç¥ãããšãã£ã¿äžéšã®ã¹ããŒã¿ã¹ããŒã«ããã«ããã¿ã³ãããããã°å®è¡ãã¿ã³ããèªåé
眮ããŠãããŸãã
```
[VS Code ã¹ããŒã¿ã¹ããŒïŒCMake Toolså°å
¥åŸïŒ]
[CMake: Debug] [Clang 15.0] [Build] [â¶ å®è¡] [ð ãããã°]
```
ãããå
¥ããšãè€éãªã³ãã³ããäžåæããã«ãäžéšã®ãBuildãããè«ã¢ã€ã³ã³ïŒãããã°ïŒããã¯ãªãã¯ããã ãã§éçºãã§ããããã«ãªããŸãïŒ
1.4 ã³ããã§åãïŒæå°ã® `CMakeLists.txt` ãã³ãã¬ãŒã
æ¬è¬åº§ã®ã€ã³ããŒããŒã²ãŒã ãè€æ°ã¯ã©ã¹ã®ããã°ã©ã ããã«ãããããã®ãæšæºçãã€çŸãã CMakeLists.txt ã§ãã
ð§ ãã³ã®ã³å
茩
ããã£ïŒCMakeLists.txt ã£ãŠé£ãããã«èŠããŠãå®ã¯ããããžã§ã¯ãåããC++ã®ããŒãžã§ã³ïŒC++17ïŒããã³ã³ãã€ã«ããcppãã¡ã€ã«åããæžããŠããã ããªãã§ããïŒ
ð»ââïž ã·ãã¯ãå
ç
ãã®éãïŒããããããã°ãWindowsã§äœã£ããããžã§ã¯ãããã®ãŸãŸMacãLinuxã®ä»²éã«æž¡ããŠããã³ãã³ãäžçºã§ãã«ãã§ããã®ããïŒ
### ãããžã§ã¯ãã®ãã©ã«ãæ§æäŸ
```
my-cpp-project/
âââ CMakeLists.txt <-- ãã«ãèšå®ãã¡ã€ã«
âââ src/
âââ main.cpp <-- ãšã³ããªãã€ã³ã
âââ Player.h <-- èªæ©ã¯ã©ã¹å®£èš
âââ Player.cpp <-- èªæ©ã¯ã©ã¹å®è£
âââ Enemy.h <-- æµã¯ã©ã¹å®£èš
âââ Enemy.cpp <-- æµã¯ã©ã¹å®è£
```
### `CMakeLists.txt` ã®äžèº«ïŒãã®ãŸãŸäœ¿ããŸãïŒ
```cmake
# 1. æå°èŠæ± CMake ããŒãžã§ã³
cmake_minimum_required(VERSION 3.15)
# 2. ãããžã§ã¯ãåãšããŒãžã§ã³
project(CppInvaderGame VERSION 1.0.0 LANGUAGES CXX)
# 3. C++17 æšæºã匷å¶ïŒã¢ãã³C++ã®æ©èœãæå¹åïŒ
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 4. ã³ã³ãã€ã«èŠåãæå€§ã«ããŠãã°ãæ©æçºèŠ
if (MSVC)
add_compile_options(/W4)
else()
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# 5. ããããã¡ã€ã«ã®æ¢çŽ¢å ŽæïŒinclude ãã£ã¬ã¯ããªïŒ
include_directories(src)
# 6. å®è¡å¯èœãã€ããªïŒcpp_invaderïŒã®çæãšãœãŒã¹ãã¡ã€ã«æå®
add_executable(cpp_invader
src/main.cpp
src/Player.cpp
src/Enemy.cpp
)
```
#### ãã€ã³ã解説
- `set(CMAKE_CXX_STANDARD 17)`: ãããæžãã ãã§ãã³ã³ãã€ã©ãäœã§ãã£ãŠãèªåçã« `-std=c++17` ãã©ã°ãé©çšãããŸãã
- `add_executable(ã¢ããªå ãœãŒã¹ãã¡ã€ã«äžèЧ...)`: ããã«æ°ãã远å ãã `.cpp` ãã¡ã€ã«ã䞊ã¹ãã ãã§ãèªåã§äžæ¬ã³ã³ãã€ã«ïŒãªã³ã¯ããŠãããŸãã
1.5 F5ããŒäžçºïŒãã«ãïŒãã¬ãŒã¯ãã€ã³ããããã°ã®å®è·µ
ç°å¢ãæŽã£ãããå®éã«ã³ãŒããèµ°ãããŠãããã¬ã®åšåãäœéšããŠã¿ãŸãããã
### ãããã°å®è¡ã®3ã¹ããã
1. **ãã¬ãŒã¯ãã€ã³ããæã€**:
`src/main.cpp` ãéããæ¢ãããè¡ã®ãè¡çªå·ã®å·ŠåŽããã¯ãªãã¯ããŸãã**èµ€ãäžžïŒâïŒ**ãç¹ç¯ããŸãã
2. **ãããã°éå§ïŒF5 ãŸã㯠è«ã¢ã€ã³ã³ïŒ**:
VS Code ã®ã¹ããŒã¿ã¹ããŒã«ãããðïŒãããã°å®è¡ïŒããæŒããã`F5` ããŒãæŒããŸãã
- CMake ãèªåçã«å€æŽãæ€ç¥ããŠãã«ããå®è¡ã
- ããã°ã©ã ãèµ·åããå
ã»ã©èµ€ãäžžãæã£ãè¡ã§**é»è²ããã€ã©ã€ã**ã«ãªã£ãŠãã¿ããšäžæåæ¢ããŸãïŒ
3. **倿°ãšã¹ãããå®è¡ã確èªãã**:
- **å·ŠåŽã®ã倿°ãããã«**: ãã®æç¹ã§ã®å€æ°ã®å€ïŒ`x = 10`, `hp = 100` ãªã©ïŒãçã§ãªã¢ã«ã¿ã€ã 衚瀺ãããŸãã
- **F10ïŒã¹ããããªãŒããŒïŒ**: 次ã®1è¡ãå®è¡ããŸãã
- **F11ïŒã¹ãããã€ã³ïŒ**: åŒã³åºããŠãã颿°ã®äžã«å
¥ã蟌ã¿ãŸãã
- **Shift+F5**: ãããã°ãçµäºããŸãã
`printf` ã `std::cout` ã§ãã°ãåã蟌ãŸãªããŠãããããã¬ã䜿ãã°**ãããã°ã©ã ãäžæåæ¢ããŠãæéãæ¢ããç¶æ
ã§äžèº«ã芳å¯ã§ããã**ããã«ãªããŸãã
1.6 åå¿è
ã100%çŽé¢ããã2倧ãã«ããšã©ãŒããšè§£æ±ºæ³
C++ã®ãã«ããšã©ãŒã¯è±èªã§é·ããŠåšå§çã§ãããåå ã®99%ã¯ä»¥äžã®2ãã¿ãŒã³ã«åé¡ãããŸãã
### ãšã©ãŒ1ïŒ`fatal error: Player.h: No such file or directory`
- **çç¶**: ã³ã³ãã€ã«ãå§ãŸã£ãŠããã«æ¢ãŸãã
- **åå **: ã³ã³ãã€ã©ãããããªååã®ããããã¡ã€ã«ã¯èŠåœãããªãããšæã£ãŠããã
- **åŠæ¹ç®**:
1. ãã¡ã€ã«åã®ã¹ãã«ãã¹ïŒå€§æåã»å°æåã®éããå«ãïŒã確èªããã
2. `#include "Player.h"` ã®ãã¹ãæ£ããã確èªããïŒ`src/` ã®äžã«ãããªã `#include "src/Player.h"` ããCMakeLists.txt ã« `include_directories(src)` ã远èšããïŒã
---
### ãšã©ãŒ2ïŒ`LNK2019 / undefined reference to 'Player::takeDamage(int)'`
- **çç¶**: ã³ã³ãã€ã«ïŒ.cppãã.objãžã®å€æïŒã¯éã£ãã®ã«ãæåŸã®æåŸïŒãªã³ã¯æ®µéïŒã§èœã¡ãã
- **åå **: ãããã§å®£èšããã颿°ã®**ãå®è£
ïŒ.cppïŒããã«ã察象ã«å«ãŸããŠããªãã**ã
- **åŠæ¹ç®**:
- `CMakeLists.txt` ã® `add_executable()` ã®ãªã¹ãã«ã`src/Player.cpp` ãæžãå¿ããŠããŸãããïŒ
- å®è£
ãã¡ã€ã«ïŒ.cppïŒãæžãè¶³ãã ãã§äžçºè§£æ±ºããŸãã
```
ããšã©ãŒã®çºçå ŽæãèŠåããæ¥µæã
ã»ãNo such file / syntax errorã -> ã³ã³ãã€ã«ãšã©ãŒïŒã³ãŒãã®æžãééãïŒ
ã»ãundefined reference / LNK2019ã -> ãªã³ã¯ãšã©ãŒïŒcppãã¡ã€ã«ã®æå®æŒãïŒ
```
ð¡ ãã®ã»ã¯ã·ã§ã³ã®éèŠãã€ã³ã
- VS Code + CMake ãçŸä»£C++ã®çé: CMakeLists.txtã«ãœãŒã¹ã䞊ã¹ãCMake Toolsã§F5ãããã°ããªã³ã¯ãšã©ãŒïŒLNK2019ïŒã¯cppã®æå®æŒããçãã®ãéåã§ãã
ð ç解床ãã§ãã¯ã¯ã€ãº
Q1. C++éçºã«ãããŠãCMakeããæãã圹å²ãšããŠãæãé©åãªãã®ã¯ã©ããïŒ
- 1. C++ã³ãŒããçŽæ¥å®è¡ããWebãã©ãŠã¶
- 2. OSãã³ã³ãã€ã©ã®éããåžåãããããžã§ã¯ãå
šäœã®ãã«ãæé ïŒMakefileãNinja/VSãããžã§ã¯ãïŒãèªåçæãããã«ããžã§ãã¬ãŒã¿
- 3. C++ã®ææ³ãã¹ãèªåçã«ä¿®æ£ããŠã³ãããããAIããŒã«
- 4. ãœãŒã¹ã³ãŒããèªåçã«é£èªåããã»ãã¥ãªãã£ãœãããŠã§ã¢
æ£è§£ãšè§£èª¬ãèŠã
æ£è§£ïŒOSãã³ã³ãã€ã©ã®éããåžåãããããžã§ã¯ãå
šäœã®ãã«ãæé ïŒMakefileãNinja/VSãããžã§ã¯ãïŒãèªåçæãããã«ããžã§ãã¬ãŒã¿
CMakeã¯ã¯ãã¹ãã©ãããã©ãŒã ãªãã«ããžã§ãã¬ãŒã¿ã§ãããWindows/Mac/Linuxã®éããæèããã«åãèšå®ããåç°å¢çšã®ãã«ããã¡ã€ã«ãçæããŸãã
Q2. `CMakeLists.txt` ã«ãããŠããããžã§ã¯ãã§ C++17 ã®èšèªæ©èœãæå¹ã«ããããã®æ£ããèšè¿°ã¯ã©ããïŒ
- 1. use_cpp_version(17)
- 2. set(CMAKE_CXX_STANDARD 17) ãš set(CMAKE_CXX_STANDARD_REQUIRED ON)
- 3. #define CPP_STANDARD 17
- 4. import cplusplus_17
æ£è§£ãšè§£èª¬ãèŠã
æ£è§£ïŒset(CMAKE_CXX_STANDARD 17) ãš set(CMAKE_CXX_STANDARD_REQUIRED ON)
CMakeã§ã¯ `set(CMAKE_CXX_STANDARD 17)` ãš `set(CMAKE_CXX_STANDARD_REQUIRED ON)` ãèšè¿°ããããšã§ãã³ã³ãã€ã©åºæã®ãã©ã°ïŒ-std=c++17ãªã©ïŒãèªåé©çšããŸãã
Q3. ãããã¬ã§èšå®ããããã¬ãŒã¯ãã€ã³ããã®åœ¹å²ãšããŠæ£ãããã®ã¯ã©ããïŒ
- 1. ããã°ã©ã ã®å®è¡é床ã10åé«éã«ãã
- 2. ãã®è¡ã«åŠçãå°éããç¬éã«ããã°ã©ã ãäžæåæ¢ããããã®æç¹ã§ã®ã¡ã¢ãªç¶æ
ã倿°ã®å€ãæ€æ»ã§ããããã«ãã
- 3. ãã®è¡ã®ã³ãŒããæ°žä¹
ã«åé€ãã
- 4. ã³ãŒãå
ã®ãã¹ãŠã®ã³ã¡ã³ããæ¶å»ãã
æ£è§£ãšè§£èª¬ãèŠã
æ£è§£ïŒãã®è¡ã«åŠçãå°éããç¬éã«ããã°ã©ã ãäžæåæ¢ããããã®æç¹ã§ã®ã¡ã¢ãªç¶æ
ã倿°ã®å€ãæ€æ»ã§ããããã«ãã
ãã¬ãŒã¯ãã€ã³ãã¯æå®ããè¡ã§ããã°ã©ã ã®å®è¡ãäžæåæ¢ããã倿°ãŠã©ãããã³ãŒã«ã¹ã¿ãã¯ç¢ºèªãªã©ã®åçè§£æãè¡ãããã®åºæ¬æ©èœã§ãã
Q4. ãã«ãæã«ãundefined reference to `Player::update()` / LNK2019: æªè§£æ±ºã®å€éšã·ã³ãã«ããšãããšã©ãŒãåºãå Žåãæãçãã¹ãåå ã¯ã©ããïŒ
- 1. ããœã³ã³ã®é»æºå®¹éãäžè¶³ããŠãã
- 2. ãããã§å®£èšãããŠãã `Player::update()` ã®å®è£
ïŒ.cppãã¡ã€ã«ïŒã CMakeLists.txt ã®ãã«ã察象ã«å«ãŸããŠããªã
- 3. VS Code ã®ãã©ã³ããµã€ãºãå°ãããã
- 4. ã€ã³ã¿ãŒãããæ¥ç¶ãåæãããŠãã
æ£è§£ãšè§£èª¬ãèŠã
æ£è§£ïŒãããã§å®£èšãããŠãã `Player::update()` ã®å®è£
ïŒ.cppãã¡ã€ã«ïŒã CMakeLists.txt ã®ãã«ã察象ã«å«ãŸããŠããªã
undefined reference / LNK2019 ã¯ãªã³ã«ãšã©ãŒã®ä»£è¡šæ Œã§ããã宣èšã«å¯Ÿããå®è£
ïŒ.cppïŒããã«ã察象ã«è¿œå ãããŠããªãïŒãªã³ã¯ãããŠããªãïŒããšãåå ã§ãã
ð»ââïž ã·ãã¯ãC++ã©ã ã€ã³ã¿ã©ã¯ãã£ãåŠç¿ã·ã¹ãã
ãã©ãŠã¶ã§JavaScriptãæå¹ã«ãããšããã©ãŠã¶å
ã€ã³ããŒããŒã²ãŒã ãšãã¥ã¬ãŒã¿ãã¡ã¢ãªãããå¯èŠåãUMLã¯ã©ã¹å³ã察話å解説ãç解床ã¯ã€ãºãèµ·åããŸãã
ã€ã³ã¿ã©ã¯ãã£ãåŠç¿ãéå§ãã â