我有一个大型的跨平台项目,需要在不同的地方建设;在某些地方,可能有不同的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命令路径?
答案 0 :(得分:10)
只是
if(PC_EGL AND PC_GLESv2 AND PC_GLESv2)
CMake将0
,FALSE
,OFF
,ANYTHING-NOTFOUND
视为错误。