我有两个从同一源(客户端和服务器)构建的可执行文件,并且它们是使用编译选项构建的-D CLIENT=0 -D SERVER=1
对于服务器和-D CLIENT=1 -D SERVER=0
为客户。如果我做类似的事情
if (CLIENT) {
// Client specific code
}
clangd 抱怨 CLIENT 未定义。有没有办法让 clangd 知道这些宏? (代码编译得很好,错误来自clangd
,而不是编译器)
有没有办法让 clangd 知道这些宏?
From 开始使用 clangd https://releases.llvm.org/9.0.0/tools/clang/tools/extra/docs/clangd/Installation.html#project-setup:
项目设置
要理解项目中的源代码,clangd 需要知道
建立旗帜。 (这只是 C++ 中的一个事实,源文件不是
独立的。)
默认情况下,clangd 会假设源代码是作为 clang 构建的
some_file.cc,您可能会收到有关丢失的虚假错误
#included 文件等。有几种方法可以解决这个问题。
编译命令.json
compile_commands.json 文件提供所有源的编译命令
项目中的文件。该文件通常由构建生成
系统,或与构建系统集成的工具。 Clangd 会看
将此文件放在您编辑的文件的父目录中。其他
工具也可以生成此文件。请参阅compile_commands.json
规格。
compile_commands.json
通常使用 CMake 构建系统生成,但更多构建系统尝试生成它。
我建议将你的项目转移到 CMake,在这个过程中你将学习这个工具,它肯定会帮助你进一步的 C-ish 开发。
编译标志.txt
如果项目中的所有文件都使用相同的构建标志,您可以将这些文件
flags,每行一个标志,位于源根目录下的compile_flags.txt中。
Clangd 将假定编译命令是 clang $FLAGS some_file.cc。
手动创建此文件是一个合理的起点,如果您
项目非常简单。
如果不转向 cmake,请创建一个compile_flags.txt
文件的内容例如如下所示,并且clangd
应该选择这个文件:
-DCLIENT=1
-DSERVER=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)