【问题标题】:How to make SCons export compile commands including flags pointing to a conda virtual environment?如何使 SCons 导出编译命令,包括指向 conda 虚拟环境的标志?
【发布时间】: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


【解决方案1】:

我让 SCons 通过添加该行来导出正确的编译命令

env.Append(CPPPATH= ['/path/to/my/conda/env/include'])

SConstruct 文件。我认为即使没有这一行,编译也能正常工作的原因是编译器安装在同一个 conda 环境中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2013-01-19
    • 2019-10-02
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多