基于图书馆存在有条件地建立目标

flu*_*ffy 6 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_executable(foo foo.cpp)
  target_link_libraries(foo ${PC_EGL} ${PC_GLESv2} ${PC_Xxf86vm})
endif()
Run Code Online (Sandbox Code Playgroud)

但是,如果我在没有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
Run Code Online (Sandbox Code Playgroud)

find_library文档暗示变量PC_EGL_NOTFOUND应该被设置,但它不是(CMake 2.8.5).那么,使用find_library确定目标是否应该存在的适当方法是什么?好像在用

if (NOT PC_EGL MATCH "-NOTFOUND")
Run Code Online (Sandbox Code Playgroud)

有点脆弱和繁琐,所以有没有一个更好的机制来确定一个基本上找到一个库的CMake命令路径?

arr*_*owd 10

这很简单

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2)
Run Code Online (Sandbox Code Playgroud)

CMake的对待0,FALSE,OFF,ANYTHING-NOTFOUND为假.