2018년 1월 14일 일요일

VS2017에서 CMake로 GLFW 프로젝트 만들기


윈도우, Visual Studio에서 C++ 프로젝트를 CMake로 관리할 수 있는 기능이 VS2017에서 추가됬습니다.
https://docs.microsoft.com/ko-kr/cpp/ide/cmake-tools-for-visual-cpp

CMake로 생성된 프로젝트는 리눅스에서 빌드하고 디버깅할 수 있다고 합니다.
Visual C++ Team Blog : https://blogs.msdn.microsoft.com/vcblog/2017/04/11/linux-development-with-c-in-visual-studio/
한글 메뉴얼 : https://docs.microsoft.com/ko-kr/cpp/linux/download-install-and-setup-the-linux-development-workload

이 기능을 테스트하기 위해서 GLFW(http://www.glfw.org/)를 사용하는 CMake 프로젝트 예제를 만들어 봤습니다.
https://github.com/hyunjun529/test_VS2017_CMake


---


Visual Studio에서 GLFW나 GLUT, OpenCV 등을 불러서 쓰면 보통 다음과 같은 프로젝트/솔루션 속성창에서 작업하게 됩니다.
저는 크게 3가지 방법으로 사용해왔습니다.



1. 설치하면 기본 경로에 lib, dll이 생기고. 소스 코드는 프로젝트내에 하드카피.
2. CMake를 빌드하고 속성에 직접 경로를 설정해준다.
3. C++ 패키지 관리자인 Vcpkg(https://github.com/Microsoft/vcpkg)를 활용한다.

1번은 제일 편하지만 대부분 라이브러리나 프레임워크가 이렇게까지 제공해주지 않습니다.
2번은 처음엔 생소하지만 편해지면 쓸만합니다. 대신 경로 관리하기가 좀 까다롭습니다.
3번은 경로 관리하기는 편한데 나중에 유지보수할 때, 특정 라이브러리를 다시 빌드해야하는 상황에서 귀찮아집니다. 또 원하는 설정으로 빌드하기가 까다롭습니다.

CMake로 GLFW 프로젝트를 만들어본 이유도 세 가지인데, 첫째로 프로젝트 속성보다 관리하기 편해보였고 둘째로 리눅스에 바로 연결해서 빌드할 수 있다는 광고를 봐서 테스트해보고 싶다. 그리고 CMake에 대해서 공부를 해보려는 목적이었습니다.


---


CMake 버전은 서버 모드가 지원되는 3.7, VS 공식으론 3.8 이상을 사용해야 합니다.
https://docs.microsoft.com/ko-kr/cpp/linux/cmake-linux-project
https://cmake.org/cmake/help/v3.7/release/3.7.html

CMake에 관한 튜토리얼은 TUWLAB 블로그의 글이 제일 좋았습니다.
https://tuwlab.com/27193

GLFW는 3.2.1 버전을 사용했습니다.
https://github.com/glfw/glfw/releases/tag/3.2.1
https://github.com/glfw/glfw/tree/999f3556fdd80983b10051746264489f2cb1ef16

CMake로 빌드하는 김에 GLFW를 Git Submodule로 받아 전부 엮어서 빌드하는 것도 테스트해봤습니다.
하지만 CMakeSettings.json을 활용하는 편이 더 간단하고 좋았습니다.
https://go.microsoft.com//fwlink//?linkid=834763

CMakeLists.txt를 Visual Studio 2017에서 직접 수정하는 것보다 VS Code에 아래 확장을 설치하고 쓰는게 편했습니다.
https://marketplace.visualstudio.com/items?itemName=vector-of-bool.cmake-tools

---


전체 코드는 GitHub(https://github.com/hyunjun529/test_VS2017_CMake).


- 버전을 3.8 이상으로 명시할 것
- CMAKE_MODULE_PATH를 이용해서 외부 라이브러리를 땡겨옵시다.


- 소스코드는 위와 같이.
- add_executable을 솔루션 하나로 생각하면 편합니다.


- CMake Module로 외부 라이브러리를 땡겨옵니다.
- 일단 윈도우에서만 쓸 수 있게 대충 써놨는데, 리눅스에선 좀 바꿔야 할지도 모릅니다.


- CMakeLists.txt 우클릭, 설정 변경을 클릭하면 자동으로 생성됩니다.
- 여기에서 빌드 설정을 할 수 있습니다.
- 리눅스에서 빌드할 때 파라미터를 여기 넣습니다.


---


CMake로 VS 프로젝트를 만들었을 때 장점과 단점.


장점
- 공부가 된다.
- 솔루션 속성으로 관리하는 것보다 신경써야 하는 항목이 적다.
- (테스트 예정)리눅스에서 VS2017로 디버깅할 수 있다.


단점
- 윈도우에서만 쓸 예정이면 굳이 쓸 만큼 장점이 없다.
- IntelliSense가 CMakeLists.txt를 읽고 캐싱하는 부분에 잔버그가 있다.
- 여러 사람과 작업해야 하는 경우, 진입장벽이나 러닝커브가 높을 것 같다.

댓글 없음:

댓글 쓰기

OpenGL로 FPS 카메라 구현하기

https://youtu.be/ikhlwGKKqZk 대학교 그래픽스 강의에서 OpenGL로 간단한 FPS를 구현했었습니다. 세가 신입사원 책이랑 게임 프로그래밍 패턴 책을 참고했었습니다. 핵심 아이디어만 간단히 요약해서 정리해둡니다. ...