I seem to have installed everything for C++, but lsp still doesn’t see the header files for some reason.
Define “installed”. If you put it in your config, remove it.
If you made a shell.nix or some mkShell environment, share that code.
My flake.nix:
{
description = "C++ dev";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
devShells.${system}.default = pkgs.mkShell.override {
} {
packages = with pkgs; [
cmake
ninja
pkg-config
clang
lld
lldb
clang-tools
];
shellHook = ''
echo "C++ dev environment"
clang++ --version
'';
};
};
}
{
description = "C++ dev";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
devShells.${system}.default = pkgs.mkShell.override {
stdenv = pkgs.clang19Stdenv;
} {
packages = with pkgs; [
cmake
];
shellHook = ''
echo "C++ dev environment"
'';
};
};
}
Still not working
What exactly does “not working” mean?
The program is now being compiled, but the code editors (I tried in helix and zed-editor) show the error 'iostream' file not found (clang pp_file_not_found)
Do you have a compile_commands.json?
No, but how do I create it? (sorry, I’m just a newbie and I haven’t figured it out yet)
Hi there,
I use Zed Editor with C++ too and ran into the same issue with header files. I found a workaround in some discussions and while it’s definitely not ideal - it’s a nice temporary fix, at least for me, who still learning NixOS
.
In your CMakeLists.txt, add this:
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()
Then, run:
cmake -S . -B build/
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1