CMake找到正确的库,但是VC ++尝试与其他内容链接 [英] CMake finds the correct library, but VC++ attempts to link with something else
问题描述
我有一个CMake模块来定位FreeGLUT:
FIND_PATH(FREEGLUT_INCLUDE_DIR NAMES GL / freeglut.h)
当我在Windows上生成NMake Makefile时,它可以正常工作并找到
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)
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 withfreeglut_static.lib
, which CMake locates and sets inFREEGLUT_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屋!