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