【问题标题】:Generate compile_commands.json using cmake使用 cmake 生成 compile_commands.json
【发布时间】:2020-02-07 02:39:37
【问题描述】:

我正在尝试使用 cmake 构建为 google-cloud-cpp 项目生成 compile_commands.json。我试过这个:

$ cmake -DBUILD_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -Hsuper -Bcmake-out
-- The CXX compiler identification is AppleClang 10.0.1.10010046
.....
.....
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    BUILD_TESTING

$ cmake --build cmake-out -- -j 4
.....
.....
[ 98%] Performing test step for 'google_cloud_cpp_project'
        Start   1: bucket_access_control_test
  1/143 Test   #1: bucket_access_control_test ................................   Passed    0.02 sec
.....
.....
100% tests passed, 0 tests failed out of 143

Total Test time (real) =  19.13 sec
[100%] Completed 'google_cloud_cpp_project'
[100%] Built target google_cloud_cpp_project

有一件事是 BUILD_TESTING 似乎被忽略了 - 它在生成构建文件并运行所有测试时产生一条消息。对我来说更直接的事情是即使设置了标志也不会产生 compile_commands.json 。这两个设置都显示在 cmake-out/CMakeCache.txt

$ grep -E 'BUILD_TESTING|COMPILE_C' cmake-out/CMakeCache.txt
BUILD_TESTING:UNINITIALIZED=OFF
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON
//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1

我错过了什么吗?我应该做其他事情吗?任何帮助表示赞赏。

【问题讨论】:

    标签: c++


    【解决方案1】:

    您正在使用超级版本。您提供的选项(-DBUILD_TESTING=OFF-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)未通过顶级 super/CMakeLists.txt 文件传递​​。

    您可以尝试将依赖项安装到$HOME 中的目录,如下所示:

    cmake -Hsuper -B.build/si -DGOOGLE_CLOUD_CPP_EXTERNAL_PREFIX=$HOME/local-cpp
    cmake --build .build/si --target project-dependencies
    

    然后像往常一样配置和编译代码:

    cmake -DBUILD_TESTING=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -H. -Bcmake-out -DCMAKE_PREFIX_PATH=$HOME/local-cpp
    cmake --build cmake-out
    

    由于您使用的是 macOS,您可能需要添加 -DOPENSSL_ROOT_DIR=/usr/local/opt/libressl 或类似的东西。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 2011-01-05
      • 2010-12-02
      相关资源
      最近更新 更多