如何为基于Autotools与Conan的C++项目生成compile_commands.json
基于Autotools与Conan的C++项目生成compile_commands.json的方法
Autotools本身没有像CMake那样直接导出compile_commands.json的内置选项,不过可以通过以下两种方式实现:
方法一:使用Bear工具直接拦截编译流程
Bear是一款专门用于捕获编译命令并生成compile_commands.json的工具,适配绝大多数构建系统,包括Autotools:
- 先安装Bear(根据系统包管理器操作,比如
apt install bear或brew install bear) - 在项目根目录下,用Bear包裹Conan的构建命令:
bear conan build . - 或者如果是手动执行Autotools流程,直接用Bear包裹make命令:
./configure # 先正常执行configure bear make -j$(nproc)
方法二:在Conanfile中集成Bear
如果希望Conan构建过程自动生成compile_commands.json,可以修改conanfile.py的build方法,让Bear参与编译步骤:
import os from conans import ConanFile, Autotools class YourProjectConan(ConanFile): # ... 其他配置 ... def build(self): autotools = Autotools(self) autotools.configure() # 使用Bear拦截make的编译命令 self.run(f"bear make -j{os.cpu_count()}")
执行conan build .后,compile_commands.json会自动生成在项目根目录。
注意事项
- 执行前建议先清理之前的构建产物(
make clean),避免Bear漏掉部分编译命令 - 确保安装的Bear版本较新,避免与Autotools/Conan的兼容性问题
内容的提问来源于stack exchange,提问作者user344563
相关产品推荐
相关产品推荐

