问题描述
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
是一个生成的文件,以及它应该如何生成它。