CMake находит правильную библиотеку, но VC ++ пытается связать что-то еще - PullRequest
2 голосов
/ 25 октября 2011

У меня есть модуль 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, когда я генерирую Makeake-файлы NMake в Windows.Я пытаюсь статически связать 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'

, что странно, поскольку freeglut.lib нигде не упоминается, что я вижу в сгенерированных make-файлах NMake.Он должен пытаться связать с freeglut_static.lib, который CMake находит и устанавливает в FREEGLUT_LIBRARIES.

Что может быть причиной этого?

1 Ответ

2 голосов
/ 25 октября 2011

Это вызвано директивами pragma в коде FreeGLUT (см. Freeglut_std.h). Использование FREEGLUT_STATIC должно исправить это для вас, но я думаю, что вы должны передать его в CMake без кавычек: ADD_DEFINITIONS(-DBUILD_VTI -DFREEGLUT_STATIC)

...