CMake找到正确的库,但是VC ++尝试与其他内容链接 [英] CMake finds the correct library, but VC++ attempts to link with something else

查看:106
本文介绍了CMake找到正确的库,但是VC ++尝试与其他内容链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个CMake模块来定位FreeGLUT:

  FIND_PATH(FREEGLUT_INCLUDE_DIR NAMES GL / freeglut.h)
FIND_LIBRARY(FREEGLUT_LIBRARY名称freeglut freeglut_static)

SET(FREEGLUT_LIBRARIES $ {FREEGLUT_LIBRARY})
SET(FREEGLUT_INCLUDE_DIRS $ {FREEGLUT_INCLUDE_DIR})

($ b FIND_PACKAGE_HANDLE_STANDARD_ARGS(FreeGLUT DEFAULT_MSG FREEGLUT_LIBRARY FREEGLUT_INCLUDE_DIR)

MARK_AS_ADVANCED(FREEGLUT_INCLUDE_DIR FREEGLUT_LIBRARY)
当我在Windows上生成NMake Makefile时,它可以正常工作并找到 freeglut_static.lib 。我正在尝试将FreeGLUT静态链接到我的DLL:

  FIND_PACKAGE(需要FreeGLUT)

ADD_LIBRARY (vti SHARED $ {VTI_SOURCES})
ADD_DEFINITIONS(-DBUILD_VTI = 1 -DFREEGLUT_STATIC = 1)
INCLUDE_DIRECTORIES($ {CMAKE_SOURCE_DIR} / include $ {FREEGLUT_INCLUDE_DIRS} _S
TAR {FREEGLUT_LIBRARIES})

我的源代码正确构建,但是进入链接阶段时,VC ++失败


LINK:致命错误LNK1104:无法打开文件'freeglut.lib'


这很奇怪,因为在生成的NMake makefile中看不到 freeglut.lib 的地方。它应该尝试链接CMake在 FREEGLUT_LIBRARIES 中定位并设置的 freeglut_static.lib



可能是什么原因?

解决方案

这是由 pragma 指令(请参见freeglut_std.h)。使用FREEGLUT_STATIC确实可以为您解决该问题,但是我认为您应该将其传递给CMake,不要使用引号: ADD_DEFINITIONS(-DBUILD_VTI -DFREEGLUT_STATIC)


I have a CMake module to locate FreeGLUT:

FIND_PATH(FREEGLUT_INCLUDE_DIR NAMES GL/freeglut.h)
FIND_LIBRARY(FREEGLUT_LIBRARY NAMES freeglut freeglut_static)

SET(FREEGLUT_LIBRARIES ${FREEGLUT_LIBRARY})
SET(FREEGLUT_INCLUDE_DIRS ${FREEGLUT_INCLUDE_DIR})

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FreeGLUT DEFAULT_MSG FREEGLUT_LIBRARY FREEGLUT_INCLUDE_DIR)

MARK_AS_ADVANCED(FREEGLUT_INCLUDE_DIR FREEGLUT_LIBRARY)

It works fine and locates freeglut_static.lib when I generate NMake Makefiles on Windows. I'm attempting to statically link FreeGLUT into my DLL:

FIND_PACKAGE(FreeGLUT REQUIRED)

ADD_LIBRARY(vti SHARED ${VTI_SOURCES})
ADD_DEFINITIONS("-DBUILD_VTI=1 -DFREEGLUT_STATIC=1")
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${FREEGLUT_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(vti ${FREEGLUT_LIBRARIES})

My source code builds correctly, but when it gets to the linking stage, VC++ fails with:

LINK : fatal error LNK1104: cannot open file 'freeglut.lib'

Which is strange since freeglut.lib isn't mentioned anywhere that I can see in the generated NMake makefiles. It should be trying to link with freeglut_static.lib, which CMake locates and sets in FREEGLUT_LIBRARIES.

What might be causing this?

解决方案

This is caused with pragma directives in FreeGLUT code (see freeglut_std.h). Using FREEGLUT_STATIC should really fix that for you, but I think you should pass it to CMake without quotes: ADD_DEFINITIONS(-DBUILD_VTI -DFREEGLUT_STATIC)

这篇关于CMake找到正确的库,但是VC ++尝试与其他内容链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆