---
# System prepended metadata

title: Hướng dẫn setup project

---

# Hướng dẫn setup project

## Cài CMake

- **macOS**: Sử dụng homebrew, gõ vào terminal và để nó chạy
```sh
brew install cmake
``` 
- **Windows**: Tải từ web: https://cmake.org/download/#latest. Chú ý add vào PATH ở đây: ![image](https://hackmd.io/_uploads/HJQu2K2aT.png) (chọn option 2 hoặc 3 đều được)

Cài phiên bản nào cũng được, nhưng tốt nhất là từ 3.20 trở lên, càng mới càng tốt.


## Cài Git

Cái này thì mọi người có rồi. Tuy nhiên chú ý setup PATH để có thể chạy git từ dòng lệnh. Để kiểm tra thì chạy, nếu ra kết quả là OK. Không thì mọi người cứ search trên mạng là ra.
```sh
> git -v
git version 2.44.0
```

## Cài một trình dịch C
- macOS thì có sẵn Apple Clang.
- Trên Windows thì có 3 lựa chọn
    - MinGW GCC: cái này hơi phức tạp, nhưng có thể mọi người đã cài khi dùng DevC++ hoặc mấy cái tool code C mà thường được GV sử dụng.
    - Clang: Cài từ web https://releases.llvm.org/download.html
    - MSVC: Phải cài Visual Studio (!= VS Code), rất nặng, nên nếu không cần thì cứ dùng Clang.

## Cài môi trường lập trình C
Môi trường lập trình C phải hỗ trợ CMake. Thường thì có các lựa chọn sau:
- Visual Studio: nặng, nhưng đi kèm với trình dịch C luôn. Tuy nhiên vẫn nặng nếu so với VSCode + Extensions + Clang.
- VS Code + Extensions: Sau khi cài VS Code, cần cài thêm các extension sau để hỗ trợ CMake: ![image](https://hackmd.io/_uploads/B1bKRY3Ta.png)
![image](https://hackmd.io/_uploads/rJ4sRF26a.png).

DevC hay ... cũng có thể hỗ trợ CMake nhưng mình chưa dùng bao giờ.

## Thực hiện biên dịch chương trình

Repo code của nhóm tại link Git: https://github.com/btmxh/IT3070

Đầu tiên mọi người tải về bằng `git clone`:
```shell
# Giả sử thư mục hiện tại là /home
# (dòng này ko cần chạy, mà chỉ để chỉ ra thư mục hiện tại thôi)
> pwd
/home

> git clone https://github.com/btmxh/IT3070
...
```

Sau đó trong `/home` sẽ có thư mục IT3070 gồm code từ Git vừa được tải.

```shell
# Chuyển thư mục đến /home/IT3070/tinyshell
> cd IT3070/tinyshell

> cmake -S. -Bbuild
...

> cmake --build build
...
```

Sau hai dòng lệnh này sẽ xuất hiện ra thư mục `/home/IT3070/tinyshell/build`. Trong đó, file `/home/IT3070/tinyshell/build/tinyshell` hoặc `/home/IT3070/tinyshell/build/Debug/tinyshell` (có thêm đuôi exe trên Windows) là file được biên dịch từ code C. Chạy file này trên dòng lệnh sẽ in ra `Hello, World!`.

```shell
# Thư mục hiện tại là /home/IT3070/tinyshell
> pwd
/home/IT3070/tinyshell

# macOS
> ./build/tinyshell
Hello, World!

# Windows
> .\build\tinyshell
> (hoặc) .\build\Debug\tinyshell
Hello, World!
```

## Submit code lên Git
Đầu tiên mọi người tạo fork (kiểu như copy) trên tài khoản GitHub của mình:
![image](https://hackmd.io/_uploads/B1R7Zc3Tp.png)
(ấn vào Fork) ở dưới Settings.

Sau đó vào thư mục `/home/IT3070` vừa clone ở trên và gọi lệnh
```shell
# <username> là username GitHub của mọi người
> git remote add fork https://github.com/<username>/IT3070
```
Lệnh này thêm một "remote" mới trỏ đến link repo fork của mình, nơi mọi người có thể up code lên thoải mái mà ko cần sự kiểm soát của mình.

Mọi người mới bắt đầu dùng Git thì nên sử dụng các tool GUI cho Git:
- Github Desktop: https://desktop.github.com/ (cái này t chưa dùng)
- Mục Source Control của VSCode + Extension GitLens
![image](https://hackmd.io/_uploads/SkLDM9hT6.png)
![image](https://hackmd.io/_uploads/H1f5fch6T.png)
Khi muốn up code thì mọi người viết một commit message vào cái ô đen và bấm Commit. Sau khi commit xong thì vào phần branch và chọn branch tương ứng với fork của mn và push bằng lệnh (t ko rõ dùng GUI ntn)
```shell
> git push -u fork master
```

Sau khi push xong mn lên GitHub sẽ có xuất hiện một cái nút ntn ![image](https://hackmd.io/_uploads/SyH8B93ap.png), thì mn bấm vào để tạo pull request.

**Nhiệm vụ**: thay đổi string Hello, World thành bất cứ string nào mà mn thích trong file `tinyshell/main.c` rồi tạo pull request.


