cmake外部项目:允许下载或用户指定的路径

时间:2013-04-10 00:09:13

标签: cmake

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

  • 允许cmake的ExternalProject工具自动下载,配置,构建和安装此外部项目
  • 如果外部项目已在本地构建,则允许用户手动指定headers / libs的路径

这个想法是,如果用户不关心并且只是运行

cmake .

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

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

1 个答案:

答案 0 :(得分: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消息并允许用户重试。