0

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

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

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

cmake .

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

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

4

1 回答 1

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,您可能会使用andfind_package来代替。find_pathfind_library

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

于 2013-04-10T03:05:34.953 回答