【问题标题】:How to define a dependency in CMake only on build system not on target system如何在 CMake 中仅在构建系统而不是目标系统上定义依赖关系
【发布时间】:2018-10-29 07:23:32
【问题描述】:

我有以下问题:我使用 CMake 构建了一个 SDK。在构建过程中,由 custom_target 生成稍后发送给客户端的公共头文件。客户端应用程序需要此头文件,因此也需要作为 SDK 一部分提供的示例应用程序。因此,在我的构建系统中,示例应用程序当前表达了对生成标头的目标的依赖关系,以便在尝试构建示例应用程序之前生成它:

set(TARGET MyExample)
set(SOURCES ${TARGET}.cpp)
add_executable(${TARGET} ${SOURCES})
add_dependencies(${TARGET} InterfaceHeaderGenerator)
# ... more code 

现在在客户端系统上,由“InterfaceGenerator”生成的文件当然已经存在,因此这种依赖是无效的。

我正在寻找一种能够将我的 CMake 文件发送给客户的方式,客户可以使用它们而无需为“开发”和“客户端”模式维护 2 个不同的 CMakeLists.txt 文件副本。

我知道这可能可以使用与 CPack 相关的生成器表达式来解决。但是我不能使用 CPack,因为它缺少我需要的另一个功能:能够在多个包中发布和安装相同的目标。

这可能吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    使用if(BUILDING_SDK) 保护此add_dependency() 调用,并将此变量默认设置为OFF,在您的情况下设置为ON

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 2023-02-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多