考虑一个依赖于外部项目的项目。在配置我的项目时,我想为用户提供以下两种选择之一:
这个想法是,如果用户不关心并且只是运行
cmake .
然后cmake将自动执行外部项目的下载和安装。但是,开发人员通常已经在其计算机上本地构建了外部项目(并且未安装)。为了节省内存或便于自定义,我还希望用户能够手动指定(例如通过ccmake)该项目的头和库路径,这将节省cmake下载和编译的工作量
有没有一种巧妙的方法可以做到这一点?
答案 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_path
和find_library
。
无论如何,您需要决定如何处理用户传递路径的情况,目的是查找其他项目的现有(已构建)副本,但find_xxx
调用失败。您可以继续调用ExternalProject
模块,或者您可以提供有用的FATAL_ERROR
消息并允许用户重试。