cmake find_path无法按预期工作

时间:2017-03-20 12:41:28

标签: cmake

我有以下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")

为什么呢?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

将我的评论转化为答案

在你的第一种情况下,CMake确实在默认路径中找到了标题。

CMAKE_FRAMEWORK_PATH作为额外的搜索路径似乎是一个奇怪的选择,因为该变量包含一个“目录列表,指定了find_library(),find_package(),find_path()使用的OS X框架的搜索路径,以及find_file()命令。“

我已经尝试了我的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