如何将Makefile调用CMake的混合项目导入CLion?
解决CLion中Makefile调用CMake项目的代码索引问题
Compilation Database 和 bear 完全可以解决你的问题,CLion原生支持通过compile_commands.json文件解析编译配置并完成代码索引,不管构建流程是Makefile调用CMake还是其他组合方式。下面是具体步骤:
一、生成compile_commands.json
有两种可靠的生成方式:
方式1:用bear拦截构建命令
bear是专门生成编译数据库的工具,它会拦截构建过程中的所有编译命令,输出标准格式的compile_commands.json。
在项目根目录执行构建命令时,给命令加上bear前缀:
bear -- make all
执行完成后,项目根目录会自动生成compile_commands.json文件。
方式2:让CMake直接生成
因为你的插件是通过CMake构建的,直接在CMake调用时添加参数,让它自动输出编译数据库:
修改contrib/storage_am/Makefile中的cmake命令,加上-DCMAKE_EXPORT_COMPILE_COMMANDS=ON:
# in contrib/storage_am/Makefile build-storage-am: mkdir -p build && cd build && cmake .. ${CMAKE_FLAGS} -DBUILD_GTEST=ON -DCMAKE_PREFIX_PATH=${prefix} -DCMAKE_INSTALL_PATH=${prefix} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON && make
构建完成后,contrib/storage_am/build目录下会生成compile_commands.json。你可以把这个文件软链接到项目根目录,方便CLion识别:
ln -s contrib/storage_am/build/compile_commands.json ./
二、配置CLion识别编译数据库
- 打开CLion的设置(
File > Settings,或快捷键Ctrl+Alt+S) - 导航到
Build, Execution, Deployment > Compilation Database - 在
Compile commands file选项中,选择你生成的compile_commands.json文件(如果文件在项目根目录,CLion通常会自动检测到) - 点击
Apply和OK,CLion会立即重新索引项目代码,之前未被识别的CMake插件代码就能正常索引了。
三、额外优化建议
- 如果需要每次构建都自动更新编译数据库,可以把bear的调用集成到主Makefile中,修改all目标:
注意:这种方式会增加每次构建的开销,按需使用。# in main Makefile: all: ... bear -- $(MAKE) -C contrib/storage_am - 你也可以直接在CLion中单独打开
contrib/storage_am目录作为CMake项目,这样CLion会直接解析CMakeLists.txt,索引更精准,但需要手动配置PostgreSQL的头文件和依赖路径(通过CMake的CMAKE_PREFIX_PATH参数)。
内容的提问来源于stack exchange,提问作者Ray Eldath
相关产品推荐
相关产品推荐

