代码之家  ›  专栏  ›  技术社区  ›  Paul Molodowitch

windows上的CMake-使用导入的目标OpenGL::GLU时FindOpenGL.CMake中的bug?

  •  1
  • Paul Molodowitch  · 技术社区  · 8 年前

    所以我试图在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报告吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   joe_chip    8 年前

    你的CMake脚本有个错误-应该是 OpenGL::GLU ,不是 OpenGL:GLU :

    target_link_libraries(OpenGLTest PRIVATE 
        ${OS_LIBRARIES} OpenGL::GL
        OpenGL:GLU # single colon!
        GLUT::GLUT
    )
    
    推荐文章