0

我正在尝试在我的项目中使用自动生成的源,这样做非常简单。

project(data_structures)

# Generate Sources and Headers
find_package(capnproto COMPONENTS capnp capnpc REQUIRED)
capnp_generate_cpp(gen_src gen_hdr ${CMAKE_CURRENT_LIST_DIR}/include/${PROJECT_NAME}/message.capnp)

# Use generated sources in another library
add_library(${PROJECT_NAME} STATIC)
target_sources(${PROJECT_NAME} STATIC${gen_hdr} ${gen_src} ${other_sources})
target_include_directories(${PROJECT_NAME}
    STATIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
    )
target_link_libraries(${PROJECT_NAME} STATIC CapnProto::capnp)
install(
    FILES ${gen_hdr}
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
    COMPONENT dev
    )

# Use ${PROJECT_NAME} in executable
...

这工作正常。可以按预期安装目标,我可以使用 find_package 找到我的库并链接到它。但是当生成的源中的 CapnProto 版本与安装的源不一致时,问题开始出现。在这种情况下,它们必须再次生成。我的想法是创建自定义目标来包装生成命令并将其导出,以便在导入时生成源。但我无法做到这一点。

有没有一种通用的方法可以做到这一点?我可以在依赖项目中重新编译这部分。

4

0 回答 0