【问题标题】:How to add_dependencies between projects in cmake如何在cmake中的项目之间添加_dependencies
【发布时间】:2021-03-29 16:15:47
【问题描述】:
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} source)

project(abc)
#a_certain_source_file.cpp is a generated file built by another project.
add_library(${PROJECT_NAME} STATIC ${source} ${xyz_BIN_DIR}/a_certain_source_file.cpp)
add_dependencies(${PROJECT_NAME} xyz)


target_link_libraries(${PROJECT_NAME} PRIVATE xyz)
# include xyz_SOURCE_DIR directory to include a_certain_source_file.cpp
target_include_directories(${PROJECT_NAME} PRIVATE ${xyz_SOURCE_DIR})


# Installation
install(TARGETS ${PROJECT_NAME} DESTINATION ${DST_LIB_DIR})

我有一个如上所述的 CMakeLists.txt。正在尝试构建项目 abc。但要构建它,我还需要“a_certain_source_file.cpp”,它是来自另一个名为 xyz 的项目的自动生成的源文件。如果 xyz 是从同一个 CMakeLists.txt 构建的,那么 add_dependencies 工作不会有问题。我无法通过我现在拥有 CMakeLists.txt 的方式解决对“a_certain_source_file.cpp”的依赖。任何可以提供帮助的 CMake 爱好者或专家?

我在这里也看到了一个接近的匹配 - cmake: add_dependencies does not work with external projects 但我不需要下载任何东西。所以不确定这是否是我需要的。

【问题讨论】:

  • 什么是xyz?目标?
  • 是的,xyz 是在另一个项目中单独构建的目标。当 xyz 构建时,它实际上会自动生成项目 abc 中需要的源文件(.cpp 和 .hpp 文件)。

标签: c++ cmake cmake-modules cmake-language cmake-format


【解决方案1】:

使用add_custom_command${xyz_BIN_DIR}/a_certain_source_file.cpp 标记为OUTPUT 创建自定义命令,并使其依赖于xyz 目标。这将告诉 CMake ${xyz_BIN_DIR}/a_certain_source_file.cpp 是一个生成的文件,以及它应该如何生成它。

【讨论】:

  • add_custom_command 存在于构建“xyz”的 libs/xyz/CMakeLists.txt 中。但我真正想要的是从其源代码构建“abc”以及由“xyz”自动生成的额外文件“a_certain_source_file.cpp”。
  • 然后在其他目标的源中提及生成的文件应该自动设置适当的依赖关系并在构建期间调用它。如果不深入研究代码,就很难回答你的情况出了什么问题。
  • 谢谢@arrowd。这就是为什么我在项目“abc”的 CMakeLists.txt 中有行 add_dependencies(${PROJECT_NAME} xyz) 。但是这个 add_dependencies 不起作用,因为“abc”和“xyz”是完全不同的项目。我有其他项目,其中依赖项在同一个项目中,并且 add_dependencies 在这种情况下工作。我不知道如何获取不同项目之间的依赖关系。
  • 但很明显,这两者在 CMake 中的处理方式完全不同,即 a) 在项目中添加依赖项,b) 在项目之间添加依赖项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2023-01-12
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多