将compile_commands.json复制到项目根文件夹

问题描述 投票:1回答:1

我在项目的根目录中有一个CMakeLists.txt,并且打开了CMAKE_EXPORT_COMPILE_COMMANDS

我正在文件夹内建立目标,并通过add_subdirectory调用。该文件夹有其自己的CMakeLists.txt文件。

compile_commands.json内置于二进制目录的根目录中,我想在运行cmake命令后将其复制到源目录的根目录中。

我尝试了两种方法。

  1. add_custom_targetadd_custom_command。我创建了一个虚拟目标。我将此目标用于add_custom_command复制文件,但它不会触发add_custom_command中的命令。

  2. file(COPY ...)第一次触发命令时,不会通过cmake创建compile_commands.json。我不想运行cmake命令两次以将副本compile_commands.json复制到源文件夹的根目录。

CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
project(exec LANGUAGES CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_subdirectory("DirectoyWithTarget")

add_custom_target(copy_compile_commands
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json)
add_custom_command(
  TARGET copy_compile_commands
  PRE_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy_if_different
    ${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json
    ${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json
  )   

compile_commands.json文件未复制到${CMAKE_CURRENT_SOURCE_DIR}。这表示未触发add_custom_command

cmake
1个回答
0
投票

如果使用cmake.copyCompileCommandsvscode,则可以使用vscode-cmake-tools

示例:

"cmake.copyCompileCommands": "${workspaceFolder}/compile_commands.json"
© www.soinside.com 2019 - 2024. All rights reserved.