FindGLEW.cmake没有规则可以使目标错误[已解决]

时间:2019-08-26 16:24:39

标签: macos cmake glew

我正在尝试使用CMake构建一个非常简单的“ hello三角形” OpenGL应用程序。我想使用find_package(GLEW)和生成的导入目标与Glew链接。运行make命令时,出现“没有规则可用于目标”错误。

根据CMake文档

https://cmake.org/cmake/help/latest/module/FindGLEW.html

https://cmake.org/cmake/help/latest/command/find_package.html

我可以使用find_package(GLEW)返回目标GLEW :: GLEW,我可以使用该目标将Glew库链接到我的代码。当我运行cmake ..时,所有内容都会生成,并且报告已找到glew-config.cmake文件。

-- Found GLEW: /usr/local/lib/cmake/glew/glew-config.cmake

然后我运行make并收到此错误

$ make
Scanning dependencies of target test
[ 50%] Building CXX object CMakeFiles/test.dir/main.cpp.o
make[2]: *** No rule to make target `/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/OpenGL.framework', needed by `test'.  Stop.'

我正在运行Mojave 10.14,并使用自制软件安装了最新的cmake和glew。上面的错误中返回的路径不存在,我也不知道它来自哪里。

这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)

project(test)

find_package(GLEW REQUIRED)

add_executable(test main.cpp)
target_link_libraries(test GLEW::GLEW)

这是我的源代码:

#include <GL/glew.h>
#include <iostream>

int main(int argc, char **argv){

std::cout << "Glew Test" << std::endl;

}

如您所见,这是简单链接Glew所需的最少代码。

问题似乎类似于以下问题:

CMake FIND_PACKAGE succeeds but returns wrong path

但是,在那种情况下,有一种使用特定于Boost的命令行标志的解决方案。我发现的有关FindGLEW和macOS问题的唯一参考资料是:

https://gitlab.kitware.com/cmake/cmake/issues/19542

但这似乎已解决。

我遇到的问题似乎是FindGLEW.cmake返回的路径:

/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/OpenGL.framework

我已经查看了实际的FindGLEW.cmake文件,以查看是否可以找到此路径的源,但是我不是CMake的专家,所以很快就迷路了。我如何找到这条路径的起源?与上面的Boost问题类似,是否可以设置任何CMake标志或变量来解决此问题?

我已使用此CMakeLists.txt与Glew成功链接:

cmake_minimum_required(VERSION 3.15)

project(test)

find_library(GLEW_DYLIB GLEW "/usr/local/Cellar/glew/2.1.0/lib")
if(NOT GLEW_DYLIB)
        message(FATAL_ERROR "Glew not found")
endif()
add_library(Glew_target SHARED IMPORTED)
set_property(TARGET Glew_target PROPERTY IMPORTED_LOCATION "/usr/local/Cellar/glew/2.1.0/lib/libGLEW.dylib")
set_property(TARGET Glew_target PROPERTY IMPORTED_IMPLIB ${GLEW_DYLIB})

include_directories(
       "/usr/local/Cellar/glew/2.1.0/include/" 
       )

add_executable(test main.cpp)
target_link_libraries(test Glew_target)

但是,我宁愿使用find_package()使事情尽可能简单,因为这绝对是一种更清洁的方法。

编辑:已解决-请参阅下面的Tsyvarev注释,以澄清CMake在上面发现的glew-config文件的性质。我删除了此文件,并没有任何问题地重建了项目。

0 个答案:

没有答案