2

我有一个 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)

freeglut_static.lib当我在 Windows 上生成 NMake Makefile 时,它​​可以正常工作并定位。我正在尝试将 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++ 失败并显示:

链接:致命错误 LNK1104:无法打开文件“freeglut.lib”

这很奇怪,因为freeglut.lib我在生成的 NMake makefile 中没有提到任何地方。它应该尝试与freeglut_static.libCMake 定位和设置的FREEGLUT_LIBRARIES.

这可能是什么原因造成的?

4

1 回答 1

2

这是由pragmaFreeGLUT 代码中的指令引起的(参见 freeglut_std.h)。使用 FREEGLUT_STATIC 应该可以真正为您解决这个问题,但我认为您应该将其传递给 CMake,而不带引号:ADD_DEFINITIONS(-DBUILD_VTI -DFREEGLUT_STATIC)

于 2011-10-24T23:33:41.440 回答