이 포스트는 Neovim의 인기 있는 배포판 중 하나인 LazyVim에서 CMake와 CMakePresets를 사용하는 방법에 대해 다룹니다.
저는 그동안 LazyExtra
로 cmake-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에서 수동으로 작업해 문제를 우회할 수 있습니다.
최근의 모던 CMake 프로젝트는 CMakePresets.json
파일을 통해 다양한 Configure 및 Build 프로필(혹은 Preset)을 지원하여, 여러 방식으로 프로젝트를 빌드할 때 매우 편리하게 사용할 수 있습니다.
CMakePresets
의 또 다른 장점은 IDE별로 CMake의 추가 Cache 변수(-DCMAKE_...) 등을 설정할 필요가 없다는 것입니다. 과거에는 VScode의 Settings.json
, CLion, Neovim 등에 CMake 설정을 따로 알려줘야 했지만, 이제는 CMakePresets.json
덕분에 이러한 번거로움이 사라졌습니다.
제가 작업 중인 프로젝트는 복잡한 CMake 설정이 필요한 관계로 CMakePresets.json
을 필수로 사용해야 합니다.
한동안 LazyVim과 CMakePresets
가 문제없이 잘 작동하던 중, 며칠 전부터 :CMakeSelectConfigurePreset
명령어가 실패하기 시작했습니다. 처음엔 제가 실수한 줄 알고 대수롭지 않게 생각했으나, 다른 컴퓨터에서도 같은 문제가 반복되자 디버깅을 결심했습니다.
다양한 디버깅 끝에, 아래 이슈를 발견했습니다.
https://github.com/Civitasv/cmake-tools.nvim/issues/268
이 이슈가 언제 해결될지 확실하지 않아 고민이었지만, 마지막으로 시도해 본 방법이 성공했습니다. compile_commands.json
파일을 수동으로 생성한 후 이를 심볼릭 링크로 연결하니 Neovim에서 CMake와 Clang이 정상적으로 작동했습니다.
추가적인 질문이 있으시면 댓글로 남겨 주세요. 전국의 모든 Neovim 사용자분들, 힘내세요!