我有两个可执行文件是从同一个源(客户机和服务器)构建的,它们使用编译选项-D CLIENT=0 -D SERVER=1 (服务器)和-D CLIENT=1 -D SERVER=0 (客户机)构建。如果我做了这样的事
if (CLIENT) {
// Client specific code
}clangd抱怨客户端没有定义。有没有办法让clangd知道这些宏?(代码编译得很好,错误来自clangd,而不是编译器)
发布于 2021-06-08 13:22:11
有没有办法让clangd知道这些宏?
项目设置 要理解项目中的源代码,clangd需要知道构建标志。(这只是C++中的一个事实,源文件并不是自成体系的。) 默认情况下,clangd将假设源代码构建为clang some_file.cc,并且您可能会得到关于丢失#包括的文件的虚假错误,等等。有几种方法可以解决这个问题。 compile_commands.json compile_commands.json文件为项目中的所有源文件提供编译命令。此文件通常由生成系统生成,或与生成系统集成的工具生成。Clangd将在您编辑的文件的父目录中查找此文件。其他工具也可以生成此文件。请参阅compile_commands.json规范。
compile_commands.json通常是用CMake构建系统生成的,但是更多的构建系统试图生成它。
我建议将您的项目迁移到CMake,在此过程中,您将学习这个工具,这将肯定有助于您进一步开发C-ish。
compile_flags.txt 如果项目中的所有文件都使用相同的生成标志,则可以将这些标志(每行一个标志)放在源根的compile_flags.txt中。 Clangd将假设编译命令是clang $FLAGS some_file.cc。 如果您的项目非常简单,手工创建这个文件是一个合理的起点。
如果不移动到cmake,则创建一个compile_flags.txt文件,其内容如下所示,clangd应该选择这个文件:
-DCLIENT=1
-DSERVER=1https://stackoverflow.com/questions/67887552
复制相似问题