
새 프로젝트를 시작할 때마다 언어가 바뀌면 빌드 명령도, 스캐폴딩 방식도, 의존성 관리 방법도 전부 다시 찾아봐야 하는 게 불편해서 만들기 시작한 도구예요. Python이면 venv/conda , Java면 Maven/Gradle, C++이면 CMake... 언어마다 익혀야 할 규칙이 다 다른데, stoke는 이걸 stoke.toml 하나로 통일해서 stoke init → stoke build → stoke run 세 명령으로 끝내는 걸 목표로 하고 있어요.
말로만 하면 감이 잘 안 올 것 같아서, 실제로 C++ 프로젝트 하나를 처음부터 만들어보는 과정을 그대로 캡처해왔어요.
1. stoke init 실행

가장 먼저 프로젝트 이름을 물어봐요. 입력이 필수는 아니에요. 입력하지 않으면 stoke init을 한 디렉토리 이름을 기본값으로 써요.
2. 언어 선택

지원하는 12개 언어 목록이 나와요. 기본값은 Python이라 아무것도 입력하지 않고 넘어가면 Python 프로젝트가 만들어져요.
3. C++ 표준 버전 선택

언어를 고르면 그 언어에 맞는 세부 옵션이 나오는데, C++의 경우 표준 버전을 고르게 돼요. 이 목록(c++17, c++20, c++23, c++14, c++11)은 어디서 실시간으로 가져오는 게 아니라 stoke 소스코드에 하드코딩되어 있는 고정 목록이에요. 나중에 시기는 아직 정해지지 않았지만 개선할 계획이에요.
이번엔 기본값(c++17)으로 그냥 진행했어요.
4. Lock 파일 모드

commit : lock 파일(stoke.lock)을 프로젝트 루트에 두고 git에 커밋해요. 팀 전체가 같은 버전으로 빌드되게 하려는 목적이에요.
local : lock 파일을 .stoke/ 안에 두고 gitignore 처리해요. 각자 컴퓨터에서만 관리해요.
혼자 진행하는 프로젝트라 공유할 팀원이 없어서 local을 선택했어요.
5. IDE 연동

VSCode, Eclipse, IntelliJ/CLion/Vim/clangd, 또는 생성 안 함 중에서 고를 수 있어요.
저는 리눅스에서 Neovim으로 작업할 거라, LSP용 compile_commands.json을 만들어주는 3번을 선택했어요.
6. 설정 요약 및 생성

지금까지 고른 설정을 한눈에 보여주고 stoke.toml을 만들지 물어봐요.
기본값이 이미 Y라서 그냥 엔터만 쳐도 진행돼요.
7. 생성 완료

stoke.toml이 만들어지고, 바로 다음에 실행할 명령어(stoke build)까지 알려줘요.
8. 빌드 전 디렉토리 구조

아직 src/main.cpp와 stoke.toml만 있는 상태예요.
9. stoke build 실행

main.cpp를 컴파일하고, lock 파일을 저장하고, .gitignore에 .stoke/와 compile_commands.json을 자동으로 추가하고, IDE 연동 파일도 함께 갱신해요.
기존 CMake/Ninja와 비교하면
CMake/Ninja로 C++ 프로젝트를 처음 세팅하려면 보통 이런 과정을 거쳐요.
CMakeLists.txt 작성
mkdir build && cd build
cmake -S .. -B . -G Ninja
ninjaCMakeLists.txt 문법을 따로 익혀야 하고, 빌드 디렉토리 구성이나 컴파일러 지정도 직접 신경 써야 하죠. stoke는 이 과정을 stoke init(스캐폴딩) + stoke build(컴파일) 두 명령으로 대체해요. stoke.toml은 사람이 직접 손대지 않아도 초기 설정 단계에서 자동으로 만들어지고요.
물론 이미 CMakeLists.txt나 meson.build가 있는 기존 프로젝트라면 stoke가 그걸 밀어내지 않고 build_system = "cmake"/"meson" 옵션으로 그 도구에 위임하도록 설계해뒀어요 — 처음부터 새로 시작하는 프로젝트에서 진입장벽을 낮추는 게 목적이지, 기존 빌드 시스템을 대체하려는 게 아니거든요.
10. 빌드 후 생성된 파일들

.gitignore, .stoke/, compile_commands.json이 새로 생겼어요. 만약 IDE로 VSCode를 선택했다면 .vscode/settings.json, .vscode/c_cpp_properties.json 같은 파일들이 추가로 더 생성돼요.
11. 생성된 설정과 예제 코드



stoke.toml에는 방금 고른 설정들이 그대로 저장돼 있고, stoke init이 자동으로 만들어주는 src/main.cpp는 "Hello from stoke!"를 출력하는 최소 예제예요.
12. stoke run 실행

타겟을 따로 지정하지 않으면 기본 타겟을 실행해요. 컴파일된 바이너리가 그대로 돌아가서 Hello from stoke!가 출력돼요.
여기까지가 C++ 기준 처음부터 끝까지의 흐름이에요. 다른 11개 언어도 각자의 방식(venv, Cargo, go.mod, Maven 등)에 맞게 같은 세 단계(init → build → run)로 동작하도록 만들고 있어요.
아직 댓글이 없어요. 첫 댓글을 남겨보세요.