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_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 命令路径?

最佳答案

简直就是

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2)

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

关于build - CMake 根据库的存在有条件地构建目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003238/

相关文章:

cmake - 使用 CMake 链接 GLEW

visual-studio-2010 - CMake添加VS2010项目自定义构建事件

c++ - Qt + conan = 使用空输出设备,没有可用的

c++ - CMake 添加和删除宏定义以编译共享库/可执行文件

带有 polymer 的 Github 页面

java - 尝试在 Maven 发布准备和执行任务上运行并行构建时出现 Ger 错误?

build - Electron 应用程序Travis CI构建失败

java - maven 2.2 war build 不会将类放在关联的 *-classes.jar 文件中

android - 如何使用 android 库中的 firebaseUI 优雅地构建 unity 项目

unix - 我在安装 CMake 时遇到问题——由于某种原因,它说它无法创建文件夹