所以我试图在windows上使用cmake来构建一个OpenGL应用程序,我在链接GLU时遇到了问题。
具体来说,我使用cmake 3.11的FindOpenGL.cmake尝试将OpenGL::GLU作为导入目标,因为我想使用“现代”cmake最佳实践。我的CMakeLists.txt有以下部分:
find_package(OpenGL REQUIRED)
if(NOT TARGET OpenGL::GLU)
message(FATAL_ERROR "GLU could not be found")
endif(NOT TARGET OpenGL::GLU)
message(STATUS "glu: ${OPENGL_glu_LIBRARY}")
get_target_property(GLU_IMPORTED_LIBNAME OpenGL::GLU IMPORTED_LIBNAME)
message(STATUS "glu imported libname: ${GLU_IMPORTED_LIBNAME}")
target_link_libraries(OpenGLTest PRIVATE
${OS_LIBRARIES}
OpenGL::GL
OpenGL:GLU
GLUT::GLUT
)
似乎发现GLU是正确的-通过了我的if检查
TARGET OpenGL::GLU
,并且我的状态打印输出为:
-- glu: glu32
-- glu imported libname: glu32
把libname设为“just”glu32(没有.lib,没有路径名)似乎有点奇怪,但也许这没关系。。。?奇怪的是,当我尝试构建/链接时,我看到这个错误:
C:\...\LINK : fatal error LNK1104: cannot open file 'OpenGL:GLU.lib'
看一下生成的build.ninja(我使用的是忍者生成器),我看到:
build OpenGLTest.exe: ...
LINK_LIBRARIES = opengl32.lib OpenGL:GLU.lib C:\...\freeglut.lib
OpenGL::GL
和
GLUT::GLUT
正确地翻译成真实的路径名,但是不知怎么的
OpenGL::GLU
目标被转换为
OpenGL:GLU.lib
有没有其他人经历过类似的事情,或者对这里可能发生的事情有什么见解?我应该对cmake提交一个bug报告吗?