Build CMake根据库的存在有条件地创建目标

Build CMake根据库的存在有条件地创建目标,build,cmake,Build,Cmake,我有一个大型跨平台项目,需要在不同的地方建设;在某些地方,可能会提供不同的UI工具包、声音API等,我正试图找出最佳方法,根据存在的库自动配置哪些目标 我正在尝试的代码是,例如: 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_

我有一个大型跨平台项目,需要在不同的地方建设;在某些地方,可能会提供不同的UI工具包、声音API等,我正试图找出最佳方法,根据存在的库自动配置哪些目标

我正在尝试的代码是,例如:

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_库文档意味着应该设置变量PC_EGL_NOTFOUND,但它不是(cmake2.8.5)。那么,使用find_库确定目标是否应该存在的合适方法是什么?好像是用

if (NOT PC_EGL MATCH "-NOTFOUND")
是有点脆弱和微妙的,那么有没有更好的机制根据是否找到库来确定CMake命令路径呢?

这很简单

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2)

CMake将
0
FALSE
OFF
ANYTHING-NOTFOUND
视为FALSE。

谢谢!这似乎应该很容易在文档或示例中找到,这是我在CMake中遇到的一个常见问题-一旦我知道如何做某件事,这很容易,但找到如何做就不那么容易了。