2012-04-04 47 views
6

我有一个大型的跨平台项目,需要在各个地方构建;在某些地方,可能有不同的UI工具包,声音API等,我试图找出自动配置基于哪些库存在配置哪些目标的最佳方法。基于图书馆存在有条件的CMake构建目标

我想要操作的代码,例如:

find_library(PC_EGL EGL) 
find_library(PC_GLESv2 GLESv2) 
find_library(PC_Xxf86vm Xxf86vm) 
if (DEFINED PC_EGL AND DEFINED PC_GLESv2 AND DEFINED PC_Xxf86vm) 
    add_executable(foo foo.cpp) 
    target_link_libraries(foo ${PC_EGL} ${PC_GLESv2} ${PC_Xxf86vm}) 
endif() 

然而,在我建立这个不具有libGLESv2可用的系统上的情况下,我得到的错误:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. 
Please set them or make sure they are set and tested correctly in the CMake files: 
PC_GLESv2 
    linked by target "foo" in directory /path/to/platform 

find_library文档意味着变量PC_EGL_NOTFOUND应该被设置,但它不是(CMake 2.8.5)。那么,使用find_library来确定一个目标是否应该存在的适当方法是什么?这似乎是使用

if (NOT PC_EGL MATCH "-NOTFOUND") 

是有点脆弱和繁琐,所以有用于基于wheter库被发现在所有CMake的一个命令路径更好的机制?

回答

9

它只是

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2) 

CMake的治疗0FALSEOFFANYTHING-NOTFOUND为假。

+0

谢谢!这看起来应该很容易在文档或例子中找到,这是我用CMake的一个常见问题 - 一旦我知道如何做一些简单的事情,但是找到如何做,而不是那么多。 – fluffy 2012-04-04 17:44:09