CMake VisualStudio не может найти библиотеку - PullRequest
0 голосов
/ 21 декабря 2018

На последнем этапе создания исполняемого файла для моего мультимедийного проекта у меня есть что-то вроде этого в одном из моего CMakeFiles.txt

add_executable(project a.cpp a.h)

if(WIN32)
    link_directories(${PROJECT_SOURCE_DIR}/lib/win)
    target_link_libraries(project opengl32 glfw3dll OpenAL32 alut ogg vorbis vorbisenc vorbisfile)
else()
    link_directories(${PROJECT_SOURCE_DIR}/lib/linux)
    target_link_libraries(project gl glfw3 openal alut vorbis ogg vorbisenc vorbisfile)
endif()

Внутри каталога /lib/win находятся все библиотеки, которые я хочу связатьto.

Но каждый раз, когда cmake сообщает, что он строит проект, я получаю сообщение об ошибке:

Error   LNK1104 cannot open file 'glfw3dll.lib' C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CMakeLists.txt    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\LINK  1   

(Да, файл, сгенерированный проектом CMake glfw, называется "glfw3dll.lib").)

Я могу жестко связываться с каждой библиотекой, используя:

target_link_libraries(project ${PROJECT_SOURCE_DIR}/lib/win/glfw3dll.lib)

для каждой отдельной библиотеки, но я думаю, что CMake не был создан, чтобы я мог написать все это ...

Также, конечно, для развертывания программного обеспечения необходимо скопировать соответствующие библиотеки в каталог окончательной сборки и установки.Как мне сказать CMake сделать это?

1 Ответ

0 голосов
/ 21 декабря 2018

Правильный способ сделать это - сначала использовать FindLibrary:

 find_library (glfw3dll_LIBRARY NAMES glfw3dll PATHS ${PROJECT_SOURCE_DIR}/lib/win)

, а затем использовать:

target_link_libraries(project ${glfw3dll_LIBRARY})

Это имеет несколько преимуществ:

  • Во время выполнения CMake вы знаете, была ли библиотека найдена правильно,
  • Поскольку у вас есть переменная, все тесты для платформы передаются в настройку, когда вы найдете все библиотеки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...