如何在cmake中的项目之间添加_dependencies

问题描述

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 但我不需要下载任何东西。所以我不确定这是否是我需要的。

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...