【问题标题】:How to only build libraries that are actual dependencies in CMake如何仅在 CMake 中构建实际依赖项的库
【发布时间】:2021-04-27 11:42:42
【问题描述】:

我有一个库作为多个应用程序的外部引入并使用add_subdirectory 包含在内。由于使用的灵活性,它有四种构建风格:GUI/CLI 和共享/静态。 GUI 应用程序倾向于构建 GUI 风格,因为它产生的用户警告显示为弹出对话框。然而,一些命令行应用程序也使用它,这些应用程序使用在终端上产生用户警告的 CLI 版本。一些应用程序使用共享版本,因为它们使用使用相同库的其他库,并且需要共享资源,例如输出日志文件句柄。一些应用程序使用静态版本,因为它们是小型实用程序,我们希望将其作为独立的二进制文件分发,而无需依赖。

如果我正在构建一个只使用这四种风格之一的 CMake 项目,我真的只想构建一种风格的库。然而,尽管如此,CMake 仍坚持构建所有四个,这完全是浪费时间。

如果库被明确列为正在构建的其他东西的依赖项,我如何向 CMake 标记应该构建该库?

【问题讨论】:

  • 你试过add_subdirectory(<dir> EXCLUDE_FROM_ALL)吗?
  • cmake --build <builddir> --target <only_your_target>
  • @Corristo,这似乎不起作用,但是将它添加为库的每种风格的目标属性都可以。请写下来作为答案,以便我接受。

标签: cmake


【解决方案1】:

对于每个目标,在库的 CMakeLists.txt 中将 EXCLUDE_FROM_ALL 属性设置为 TRUE。只有在实际需要时才会构建它。

set_target_properties(MyLib PROPERTIES
    EXCLUDE_FROM_ALL TRUE
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2021-08-17
    相关资源
    最近更新 更多