35 lines
1.1 KiB
Markdown
35 lines
1.1 KiB
Markdown
|
+++
|
||
|
title = "Clangd in Nix"
|
||
|
date = 2022-03-03
|
||
|
tags = ["nixos"]
|
||
|
+++
|
||
|
|
||
|
I've been using [Nix][NixOS] a lot recently since it handles dependency
|
||
|
management very cleanly, but one gripe that I've been having is that when I'm
|
||
|
doing C/C++ development work using `nix develop`, all my dependencies are
|
||
|
actually in the Nix store in `/nix`, so my [clangd] editor plugin won't be able
|
||
|
to find them.
|
||
|
|
||
|
Fortunately, clangd supports looking for a file called `compile_commands.json`,
|
||
|
which describes the compilation commands used for each file, with absolute paths
|
||
|
for all dependencies.
|
||
|
|
||
|
For [CMake]-based projects, there's an option to dump this information
|
||
|
automatically into the build directory, which I typically then symlink into my
|
||
|
project's root directory for my editor to find and apply to my files. Here's the
|
||
|
snippet:
|
||
|
|
||
|
```cmake
|
||
|
# Generate the `compile_commands.json` file.
|
||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
|
||
|
|
||
|
if(CMAKE_EXPORT_COMPILE_COMMANDS)
|
||
|
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
|
||
|
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
|
||
|
endif()
|
||
|
```
|
||
|
|
||
|
[NixOS]: https://nixos.org/
|
||
|
[clangd]: https://clangd.llvm.org/
|
||
|
[CMake]: https://cmake.org/
|