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



我有一个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++ 失败并显示:

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

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

可能是什么原因造成的?

这是

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

最新更新