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

时间:2012-04-04 00:09:09

标签: 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()

但是,如果我在没有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")

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

1 个答案:

答案 0 :(得分:10)

只是

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2)

CMake将0FALSEOFFANYTHING-NOTFOUND视为错误。