我有一个大型跨平台项目,需要在各个地方构建;在某些地方,可能会提供不同的 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 命令路径?