【问题标题】:cmake external project: allow either download or user-specified pathcmake 外部项目:允许下载或用户指定的路径
【发布时间】:2013-04-10 00:09:12
【问题描述】:

考虑一个依赖于外部项目的项目。在配置我的项目时,我想为用户提供以下两种选择之一:

  • 允许 cmake 的 ExternalProject 工具自动下载、配置、构建和安装这个外部项目
  • 如果外部项目已经在本地构建,允许用户手动指定头文件/库的路径

这个想法是,如果用户不在乎,只是运行

cmake .

然后 cmake 将自动执行外部项目的下载和安装。但是,开发人员通常已经在他的机器上本地构建了外部项目(并且没有安装)。为了节省内存或便于定制,我还希望用户能够手动指定(例如通过 ccmake)该项目的头文件和库路径,这将节省 cmake 下载和编译的工作.

有没有一种巧妙的方法可以做到这一点?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我不确定一个简洁的方法,但它是可能的。我想大概的流程是这样的:

    add_executable(Foo ...)
    
    find_path(OtherProjectIncludes NAMES ...)
    find_library(OtherProjectLib NAMES ...)
    
    if(OtherProjectIncludes AND OtherProjectLib)
      include_directories(${OtherProjectIncludes})
      target_link_libraries(Foo ${OtherProjectLib})
    else()
      include(ExternalProject)
      ...
    endif()
    

    如果有可用于其他项目的 FindModule,您可能会使用 find_package 代替 find_pathfind_library

    无论如何,您需要决定如何处理用户传递路径以查找另一个项目的现有(构建)副本但find_xxx 调用失败的情况。您可以继续调用ExternalProject 模块,或者您可以提供有用的FATAL_ERROR 消息并允许用户重试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 2012-06-11
      • 2023-03-28
      • 2017-05-23
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多