【发布时间】:2022-07-25 16:29:39
【问题描述】:
我正在开发一个使用 SCons 构建的 C++ 项目。我使用系统的包管理器安装了 SCons。该项目有一些我使用 conda 安装到虚拟环境中的依赖项。我跟着 SCons documentation 导出了一个compile_commands.json。
当我激活项目的 conda 环境,然后运行 scons 时,一切都编译正常并创建了 compile_commands.json。但是,导出的编译命令缺少指向 conda 环境的 include/ 目录的 -I 或 -isystem 标志。
我的编辑器 (vim/Ycm) 依赖 clangd 进行 linting 和语义完成,clangd 依赖于导出的编译命令并且不知道 conda 虚拟环境。如何让 SCons 导出所需的标志,以便 clangd 可以找到依赖项标头?
(作为比较,设置完全相同但使用 CMake 的不同项目将带有 -isystem 标志的编译命令导出到 conda 环境。)
【问题讨论】:
-
你能提供一个简单的复制器吗?没有人很难知道原因是什么。此外,您可能希望将其直接带到 scons 用户邮件列表或不和谐服务器。
-
SCons 中有一些 virtualenv 支持,不要认为这个被大量使用但可能值得一试:scons.org/doc/production/HTML/…
-
两个可能的尝试:1) 从虚拟环境中启动您的编辑器。这可能会处理包含目录包含在环境变量中的情况(例如
CFLAGS),因为编辑器在启动 clangd 时通常会通过环境变量。 2) 使用--query-driver选项来clangd,如here 所述。这将处理有问题的包含被内置到用于构建的编译器中的情况。
标签: c++ anaconda conda scons clangd