2013-04-10 81 views
0

考虑一个依赖于外部项目的项目。在配置我的项目,我想为用户提供了两个选择:cmake外部项目:允许下载或用户指定的路径

  • 允许的cmake的ExternalProject工具来自动下载,配置,编译和安装这个外部项目
  • 允许用户手动指定到页眉/库的路径如果外部工程已经被当地建造

的想法是,如果用户不关心,只是运行

cmake . 

然后cmake会自动执行外部项目的下载和安装。但是,开发人员已经在他的机器上已经有本地构建的外部项目(并且未安装),这是很常见的。为了节省内存或便于自定义,我还希望用户能够手动指定(通过ccmake)该项目的头文件和库路径,这将为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_pathfind_library使用find_package

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