首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让clangd知道编译器给出的宏

让clangd知道编译器给出的宏
EN

Stack Overflow用户
提问于 2021-06-08 13:04:29
回答 1查看 731关注 0票数 2

我有两个可执行文件是从同一个源(客户机和服务器)构建的,它们使用编译选项-D CLIENT=0 -D SERVER=1 (服务器)和-D CLIENT=1 -D SERVER=0 (客户机)构建。如果我做了这样的事

代码语言:javascript
复制
if (CLIENT) {
// Client specific code
}

clangd抱怨客户端没有定义。有没有办法让clangd知道这些宏?(代码编译得很好,错误来自clangd,而不是编译器)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-08 13:22:11

有没有办法让clangd知道这些宏?

来自开始使用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应该选择这个文件:

代码语言:javascript
复制
-DCLIENT=1
-DSERVER=1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67887552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档