我有以下CMake脚本,它可用于:

find_path(
  GLES_SDK_INCLUDE_DIR
  NAMES "GLES2/gl2.h"
  PATHS "${CMAKE_FRAMEWORK_PATH}/include")

但这返回一个-NOTFOUND:
find_path(
  GLES_SDK_INCLUDE_DIR
  NAMES "gl2.h"
  PATHS "${CMAKE_FRAMEWORK_PATH}/include/GLES2")

为什么?任何想法?

最佳答案

把我的评论变成答案

在第一种情况下,CMake只会在默认路径中找到 header 。

CMAKE_FRAMEWORK_PATH 作为附加搜索路径似乎是一个奇怪的选择,因为该变量包含“目录,这些目录指定了find_library(),find_package(),find_path()和find_file()命令使用的OS X框架的搜索路径”。

我已经给您的示例尝试了Ubuntu发行版,并且可以通过流动测试重现您的问题:

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

project(FindGL2)

unset(GLES_SDK_INCLUDE_DIR CACHE)
find_path(
    GLES_SDK_INCLUDE_DIR
    NAMES "GLES2/gl2.h"
    PATHS "${CMAKE_FRAMEWORK_PATH}/include"
)
message(STATUS "GLES2/gl2.h => ${GLES_SDK_INCLUDE_DIR}")

unset(GLES_SDK_INCLUDE_DIR CACHE)
find_path(
    GLES_SDK_INCLUDE_DIR
    NAMES "gl2.h"
    PATHS "${CMAKE_FRAMEWORK_PATH}/include/GLES2"
)
message(STATUS "gl2.h => ${GLES_SDK_INCLUDE_DIR}")


-- GLES2/gl2.h => /usr/include
-- gl2.h => GLES_SDK_INCLUDE_DIR-NOTFOUND

解决方案

使用PATH_SUFFIXES "include/GLES2"或仅使用PATH_SUFFIXES "GLES2"代替:
find_path(
    GLES_SDK_INCLUDE_DIR
    NAMES "gl2.h"
    PATH_SUFFIXES "GLES2"
)
message(STATUS "gl2.h => ${GLES_SDK_INCLUDE_DIR}")

确实给:
-- gl2.h => /usr/include/GLES2

关于cmake find_path无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42903890/

10-12 23:52