CMake找到了正确的库,但VC ++尝试与其他东西链接

时间:2011-10-24 22:27:53

标签: visual-c++ cmake nmake freeglut

我有一个CMake模块来定位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)

当我在Windows上生成NMake Makefiles时,它工作正常并找到freeglut_static.lib。我试图将FreeGLUT静态链接到我的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})

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

  

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

这很奇怪,因为在生成的NMake makefile中我没有提到freeglut.lib。它应该尝试链接freeglut_static.lib,CMake在FREEGLUT_LIBRARIES找到并设置。

可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:2)

这是由FreeGLUT代码中的pragma指令引起的(请参阅freeglut_std.h)。使用FREEGLUT_STATIC应该真正为你解决这个问题,但我认为你应该将它传递给CMake而不加引号:ADD_DEFINITIONS(-DBUILD_VTI -DFREEGLUT_STATIC)