使用CMAKE将compile_commands.json复制到项目根目录

3

这是我在项目根目录下的 CMakeLists.txt 文件中的内容:

cmake_minimum_required(VERSION 3.13)
project(cmake_wrapper)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_custom_target(
    copy-compile-commands ALL
    ${CMAKE_COMMAND} -E copy_if_different
    ${CMAKE_BINARY_DIR}/compile_commands.json
    ${CMAKE_CURRENT_LIST_DIR}
    )

# I am using conan & everything works fine, so you may ignore 2 lines below
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup() 

# add submodule
add_subdirectory(src)

然后我在我的build文件夹中运行cmake ..,在build文件夹中生成了compile_commands.json,但我没有看到该文件被复制到我的项目根目录中。

更新: 因此,似乎我需要运行build/make来触发此步骤。 是否有一种方法可以在运行make之前但compile_commands.json生成后立即复制文件?


1
更大的视角是:完全不清楚为什么需要这样做。它看起来像一个XY问题 - Alex Reinking
1
对于需要了解编译上下文的代码检查工具设置,您需要访问此文件。默认情况下,它们通常只是通过搜索路径来查找它,但非源代码构建将位于该路径的单独分支中,因此无法找到。将其复制(或链接)到源路径中可轻松找到正确的文件。 - Aaron
2个回答

1
似乎我需要运行构建/编译才能触发此步骤。在运行make之前是否有一种方法可以复制文件,但在生成compile_commands.json后立即进行? 没有。 CMake 会在生成步骤期间生成compile_commands.json,该步骤会在您的 CMake 代码运行(配置步骤)之后立即发生,并在生成的构建系统运行(构建步骤)之前发生。
CMake 没有执行任意 CMake 代码的功能。

0

在配置阶段,不要复制,而是创建符号链接。

execute_process(
    COMMAND ${CMAKE_COMMAND} -E create_symlink
        ${CMAKE_BINARY_DIR}/compile_commands.json
        ${CMAKE_SOURCE_DIR}/compile_commands.json
)

它可以在Windows上运行 - 但无法在不支持链接的文件系统上运行,例如FAT。 - KamilCuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接