#6. [개발설정] VSCode 에서 CMake 환경 구성
개요
C++ 에서는 프로젝트를 구성하는 파일이 여러개 라면 Make 환경을 구축해야 해야 합니다. Makefile을 직접 작성하는 방법도 있지만, 손쉬운 유지관리를 위해 CMake를 사용하는 방법이 좋습니다. CMake를 사용하려면, CMake 설치와 VSCode Extensions에서 CMake, CMake Tools를 설치해야 합니다.
항목 | 내용 |
---|---|
CMake | Makefile 생성 지원 |
VSCode Extension의 CMake | 에디터의 CMake intelliSence 지원, C/C++ Extension Pack 설치시 포함됨 |
VSCode Extension의 CMake Tools | 빠른 시작, CMake 기반 빌드 환경, C/C++ Extension Pack 설치시 포함됨 |
사전 설치
하기 항목이 사전에 설치되어야 합니다.
항목 | 내용 |
---|---|
VSCode | VSCode 설치 |
VSCode Extension(C/C++ Extension Pack) | VSCode Extension 설치(C/C++ Extension Pack) |
MinGW-w64 | MinGW-w64 설치(GNU C++ 컴파일러) |
Git | Git 설치 |
테스트 환경 구축(Github 활용)
이전 따라하기를 참고하여 테스트 환경을 구축합니다.
[개발환경] Github를 원격 레포지토리로 사용하기에서 Github
에 소스코드를 push 해 두었으므로, 이를 pull 하여 수정하는 것으로 진행합니다.
-
탐색기에서
language_test
폴더를 생성합니다. -
VSCode 에서
File/Open Folder
를 실행하여language_test
폴더를 엽니다. -
Git 초기화를 참고하여,
git config
로 이메일과 이름을 등록하고,Side Bar(SOURCE CONTROL)/Initialize Repository
를 실행합니다. -
Panel(TERMINAL)
에서git remote add origin [원격 레포지토리 주소]
를 실행합니다. -
Panel(TERMINAL)
에서git pull origin master --allow-unrelated-histories
를 실행합니다. -
그러면
Github
에 있었던cpp/src/main.cpp
,.gitignore
,README.md
파일이 로컬로 저장됩니다. -
cpp/src/main.cpp
파일을 다음과 같이 작성합니다.1 2 3 4 5 6 7 8 9
#include <iostream> #include "Test.h" int main() { std::cout << "Hello World!!!" << std::endl; Test::Run(); // Test.cpp에 정의된 함수 return 0; }
-
cpp/src/Test.h
파일을 생성하고, 다음과 같이 작성합니다.1 2 3 4 5 6 7 8
#ifndef Test_h #define Test_h class Test { public: static void Run(); }; #endif // Test_h
-
cpp/src/Test.cpp
파일을 생성하고, 다음과 같이 작성합니다.1 2 3 4 5 6 7 8 9 10
#include "Test.h" #include <iostream> void Test::Run() { int a = 1; int b = 2; int c = a + b; std::cout << "Call Run" << std::endl; std::cout << c << std::endl; }
-
폴더 구조는 다음과 같습니다.
1 2 3 4 5 6 7 8
+--language_test +--cpp +--src +--main.cpp +--Test.h +--Test.cpp +--.gitignore +--README.md
-
main.cpp
를 활성화하고,F5
를 눌러 디버깅을 하면, 다음과 같은 오류 메시지가 표시됩니다.(.vscode/task.json
파일도 만들어 집니다.) -
Abort
를 누르고,Panel(TERMINAL)
을 확인하면, 다음과 같이Test::Run()
이 정의되지 않았다는 메시지가 나옵니다. -
이는 컴파일러가
main.cpp
만 컴파일하고,Test.cpp
는 컴파일하지 않았기 때문입니다. CMake를 이용한 Make 환경을 구축해야 합니다.
CMake 설치
-
다음 링크에서 CMake를 다운로드 받습니다. CMake(https://cmake.org/download/)
-
CMake
Path
설정을 위해Install Options
에서Add CMake to the system PATH for all users
를 선택합니다. -
설치 확인을 위해
cmd
에서cmake --version
를 입력하여 버전을 확인합니다.
VSCode Extension 설치(CMake, CMake Tools)
-
VSCode Extension 설치(C/C++ Extension Pack)에서
C/C++ Extension Pack
을 설치하면,CMake
와CMake Tools
가 함께 설치됩니다. -
설치되어 있지 않다면
CMake
로 검색하여 설치하면 됩니다.
CMake를 이용한 빌드 구성(Quick Start)
-
View/Command Palette
(Ctrl+Shift+P)를 실행하고,CMake
로 검색합니다. 목록에서CMake:Quick Start
를 실행합니다. -
하기 화면에서 컴파일러를 선택합니다.
-
혹은
CMakeLists.txt
가 없다고 표시될 수도 있는데, 그냥Enter
하여 나타나는열기
대화상자를 그냥 닫고, 다시CMake:Quick Start
를 실행합니다.(이러한 경우 아마도CMake:Reset
이 필요할 수 있습니다. CMake 초기화(Reset)) -
2의 단계나 3의 단계를 거치면 새 프로젝트의 이름을 요청합니다.
test_cmake
로 입력하고Enter
합니다. -
실행 파일을 만들 것이므로
Executable
을 선택합니다. -
그러면
build
폴더가 생성되고,Source Control
에245
개의 수정이 있다고 표시되고, root 폴더에CMakeLists.txt
파일과main.cpp
가 생성됩니다.항목 내용 build
폴더빌드 과정에 필요한 임의 생성 파일들 245개의 수정항목 대부분 build
폴더 하위에 자동 생성된 파일들CMakeLists.txt Makefile 생성을 위한 스크립트 파일 main.cpp CMake가 자동 생성한 기본 cpp 파일 -
자동 생성된
main.cpp
를 삭제합니다.(cpp/src/main.cpp
를 삭제하면 안됩니다.) -
.gitignore
에build/
추가하여 Git 관리항목에서 제외합니다.1 2 3
.vscode/ *.exe build/
-
그러면
245
개의 수정항목이5
개로 줄어듭니다.
CMakeLists.txt 작성
CMakeLists.txt
파일은 Makelist
파일로 변환된 후 make
를 통해 빌드됩니다. Quick Start
를 통해 자동 생성된 내용은 하기와 같습니다.(#
주석은 제가 붙인 것입니다.)
1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 3.0.0) # 최소요구버전
project(test_cmake VERSION 0.1.0) # PROJECT_NAME 과 PROJECT_VERSION
include(CTest) # 단위 테스트인 CTest 포함
enable_testing() # 단위 테스트 활성화 시킴
add_executable(test_cmake main.cpp) # 빌드 대상 추가. <실행파일명> <소스파일명> <소스파일명>
set(CPACK_PROJECT_NAME ${PROJECT_NAME}) # 실행파일명
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) # 실행파일버전
include(CPack) # 기본적으로 build 경로에 실행파일을 생성함
CTest 는 사용하지 않을 것이므로 enable_testing()
은 제거하고, 빌드대상은 cpp/src/main.cpp
, cpp/src/Test.cpp
이므로 다음과 같이 add_excutable()
을 수정합니다.
1
2
3
4
5
6
7
8
cmake_minimum_required(VERSION 3.0.0) # 최소요구버전
project(test_cmake VERSION 0.1.0) # PROJECT_NAME 과 PROJECT_VERSION
add_executable(test_cmake cpp/src/main.cpp cpp/src/Test.cpp) # 빌드 대상 추가. [실행파일명] [소스파일명] [소스파일명]
set(CPACK_PROJECT_NAME ${PROJECT_NAME}) # 실행파일명
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) # 실행파일버전
include(CPack) # 기본적으로 build 경로에 실행파일을 생성함
CMake 초기화(Reset)
CMake:QuickStart
시 가끔 하기 오류가 표시되며 build
폴더가 생성되지 않을 때가 있습니다. 이럴 경우 View/Command Palette
(Ctrl+Shift+P)에서 CMake:Reset CMake Tools Extension State(For troubleshooting)
을 실행하고, CMake:Quick Start
를 재시도 합니다.
CMake 빌드 재구성(Configure)
일반적으로 CMakefiles.txt
를 수정 후 저장하면 Makefile
과 build
폴더가 생성됩니다. 하지만, build
폴더를 깔끔하게 정돈하고 싶을때도 있고, Makefile
변환 과정에서 이전 잔재가 남아 빌드 오류가 발생할 수도 있습니다.
이럴때는 물리적으로 build
폴더를 삭제하고, View/Command Palette
(Ctrl+Shift+P)에서 CMake:Configure
를 실행하여 Makefile
과 build
폴더를 다시 만들 수 있습니다.
CMake를 이용한 빌드, 디버깅
-
View/Command Palette
(Ctrl+Shift+P)에서CMake:Build
(F7)를 하면, 빌드되고 빌드 결과물인test_cmake.exe
가build
폴더에 생성됩니다.Panel(OUTPUT)
에는 빌드를 마쳤다는 메시지가 표시됩니다. -
View/Command Palette
(Ctrl+Shift+P)에서CMake:Run Without Debugging
(Shift+F5)를 하면,test_cmake.exe
가 실행됩니다.Panel(TERMINAL)
에 실행 메시지가 표시된걸 확인할 수 있습니다. -
Run/Toggle breakpoint
(F9)를 하면, 중단점이 설정됩니다.(혹은 코드에서 라인넘버 왼쪽의 중단점 표시영역을 클릭합니다.)main.cpp
의Test::Run()
에 중단점을 설정합니다. 중단점을 설정하면 라인 옆에 붉은색 점이 표시됩니다. -
View/Command Palette
(Ctrl+Shift+P)에서CMake:Debug
(Ctrl+F5)를 하면, 중단점 위치까지 실행되며, 좌측Side Bar(RUN AND DEBUG)
에서 변수값을 확인하고, 상단 디버깅 툴바에서Continue
(F5),Step Over
(F10),Step Into
(F11),Step Out
(Shift+F11) 등으로 다음 지점의 중단점이나 다음 단계로 진입할 수 있습니다. -
Step Into
(F11)을 하여Test::Run()
함수내에 진입하여,VARIALBLES
에서 현 함수의 변수 값을 확인하고,WATCH
에서 보고싶은 변수나 수식을 입력하여 확인할 수 있습니다. -
View/Command Palette
(Ctrl+Shift+P)에서CMake:Clean
을 하면, 빌드시에 생성 파일들을 모두 지우고 정리 합니다. -
View/Command Palette
(Ctrl+Shift+P)에서CMake:Variant
를 하면, 빌드 방법 중Debug
,Release
,MinSizeRel
,RelWithDebInfo
를 선택할 수 있습니다.항목 내용 Debug 최적화 불포함. 디버그 정보 포함 Release 최적화 포함. 디버그 정보 불포함 MinSizeRel 크기에 맞게 최적화. 디버그 정보 불포함 RelWithDebInfo 최적화 포함. 디버그 정보 포함
CMake 상태 표시줄
VSCode 하단의 Status Bar
를 보면 CMake 관련 명령들이 제공됩니다.
-
:
CMake:Variant
와 동일합니다. -
: 컴파일러를 선택합니다.
-
:
CMake:Build
와 동일합니다. -
:
CMake:Debug
와 동일합니다. -
:
CMake:CMake:Run Without Debugging
와 동일합니다.
CMake 파일 구성 변경
-
빌드 대상인 파일의 구성이 변경되면,
CMakelists.txt
파일의add_excutable()
에 파일 구성을 변경합니다.1 2 3 4 5 6
add_executable(test_cmake cpp/src/main.cpp cpp/src/Test.cpp cpp/src/Test2.cpp cpp/src/Test3.cpp ) # 빌드 대상 추가. [실행파일명] [소스파일명] [소스파일명]
-
View/Command Palette
(Ctrl+Shift+P)에서CMake:Build
(F7)를 하여 다시 빌드합니다.
댓글남기기