[최신] Neovim에서 CMake 사용하기

0

이 포스트는 Neovim의 인기 있는 배포판 중 하나인 LazyVim에서 CMake와 CMakePresets를 사용하는 방법에 대해 다룹니다.

저는 그동안 LazyExtracmake-tools.nvim을 유용하게 사용해 왔지만, 2024년 11월 9일 현재, 약 2주 동안 :CMakeSelectConfigurePreset 명령어가 작동하지 않는 상황이 발생해 이를 디버깅하며 해결 방법을 찾아냈습니다.

이 문제의 원인은 cmake-tools.nvim의 버그로 추정되며, 아래와 같이 이슈가 보고되어 있습니다:
https://github.com/Civitasv/cmake-tools.nvim/issues/268

이러한 버그에도 불구하고 Neovim에서 CMake를 계속 사용할 수 있는 우회 방법을 발견했습니다. 주말 동안 직접 해결 방법을 찾았고, 이를 여러분과 기쁘게 공유합니다. 이미 이 문제를 알고 계신 분도 있겠지만, 저처럼 Neovim과 CMake에 익숙하지 않은 분들께 도움이 되길 바랍니다.

빠른 해결 방법:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON --preset <mypreset>
ln -s <build_dir>/compile_commands.json .

해결 방법 설명:

이 명령어들은 :CMakeSelectConfigurePreset 명령어가 담당하던 작업을 대신합니다. 즉, CMAKE_EXPORT_COMPILE_COMMANDS=ON을 통해 빌드 디렉토리에 compile_commands.json 파일을 생성하고, 이 파일을 현재 작업 디렉토리에 심볼릭 링크하는 방식입니다. 현재 이 명령어가 버그로 인해 동작하지 않으므로, 위와 같이 CLI에서 수동으로 작업해 문제를 우회할 수 있습니다.


상세 설명

CMakePresets란?

최근의 모던 CMake 프로젝트는 CMakePresets.json 파일을 통해 다양한 Configure 및 Build 프로필(혹은 Preset)을 지원하여, 여러 방식으로 프로젝트를 빌드할 때 매우 편리하게 사용할 수 있습니다.

CMakePresets의 또 다른 장점은 IDE별로 CMake의 추가 Cache 변수(-DCMAKE_...) 등을 설정할 필요가 없다는 것입니다. 과거에는 VScode의 Settings.json, CLion, Neovim 등에 CMake 설정을 따로 알려줘야 했지만, 이제는 CMakePresets.json 덕분에 이러한 번거로움이 사라졌습니다.

제가 작업 중인 프로젝트는 복잡한 CMake 설정이 필요한 관계로 CMakePresets.json을 필수로 사용해야 합니다.

cmake-tools.nvim의 버그

한동안 LazyVim과 CMakePresets가 문제없이 잘 작동하던 중, 며칠 전부터 :CMakeSelectConfigurePreset 명령어가 실패하기 시작했습니다. 처음엔 제가 실수한 줄 알고 대수롭지 않게 생각했으나, 다른 컴퓨터에서도 같은 문제가 반복되자 디버깅을 결심했습니다.

다양한 디버깅 끝에, 아래 이슈를 발견했습니다.
https://github.com/Civitasv/cmake-tools.nvim/issues/268

이 이슈가 언제 해결될지 확실하지 않아 고민이었지만, 마지막으로 시도해 본 방법이 성공했습니다. compile_commands.json 파일을 수동으로 생성한 후 이를 심볼릭 링크로 연결하니 Neovim에서 CMake와 Clang이 정상적으로 작동했습니다.

추가적인 질문이 있으시면 댓글로 남겨 주세요. 전국의 모든 Neovim 사용자분들, 힘내세요!

0개의 댓글

관련 채용 정보