如何在 CMake 中的项目之间使用“add_dependency”

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

我尝试构建项目“abc”。要构建它,我还需要“xyz_made.cpp”,这是从另一个项目“xyz”(自动)生成的源文件。

如果“xyz”是从“CMakeLists.txt”构建的,那么使用“add_dependency”就不会有问题,但我无法使用此“CMakeLists.txt”解决对“xyz_made.cpp”的依赖关系”:

include_directories(${CMAKE_CURRENT_SOURCE_DIR})
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} source)

project(abc)

# "xyz_made.cpp" is a generated file built by 
#   another project, "xyz".
add_library(${PROJECT_NAME} 
  STATIC 
    ${source} 
    ${xyz_BIN_DIR}/xyz_made.cpp
)

add_dependencies(${PROJECT_NAME} xyz)


target_link_libraries(${PROJECT_NAME} 
  PRIVATE 
    xyz
)

# include xyz_SOURCE_DIR directory to include xyz_made.cpp
target_include_directories(${PROJECT_NAME} 
  PRIVATE 
    ${xyz_SOURCE_DIR}
)
    
# Installation
install(TARGETS ${PROJECT_NAME} DESTINATION ${DST_LIB_DIR})

有任何 CMake 爱好者或专家可以提供帮助吗?

我看到了类似的问题,但就我而言,我不需要下载 CMakeLists.txt 中的任何内容。

c++ cmake cmake-modules cmake-language cmake-format
1个回答
0
投票

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.