【问题标题】:CMake VisualStudio can not find libraryCMake Visual Studio 找不到库
【发布时间】:2018-12-21 14:26:01
【问题描述】:

对于为我的多媒体项目创建可执行文件的最后一步,我的 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 目录内是我要链接的所有库。

但每次告诉 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   

(是glfw的CMake项目生成的文件叫做“glfw3dll.lib”)

我可以使用以下方法对每个库进行硬链接:

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

对于每个单独的库,但我猜 CMake 并不是让我编写所有这些...

当然也需要将相应的库复制到最终的构建和安装目录才能部署软件。我如何告诉 CMake 这样做?

【问题讨论】:

标签: c++ cmake linker


【解决方案1】:

正确的做法是先使用FindLibrary

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

然后使用它:

target_link_libraries(project ${glfw3dll_LIBRARY})

这有几个优点:

  • 您在 CMake 运行时知道是否正确找到了该库,
  • 由于您有一个变量,当您找到所有库时,所有平台测试都将归入设置。

【讨论】:

  • 这行得通……但究竟是什么写入了变量?以及如何告诉 CMake 将所有库复制到构建或安装目录以进行测试或部署,因为当我启动可执行文件时,库文件被视为丢失。
  • 在这种情况下,它将是完整路径,但对您隐藏。然后 CMake 在幕后将此路径更改为 -Lpath -llib。要安装库,您需要使用INSTALL 添加安装步骤。
猜你喜欢
  • 2022-10-15
  • 1970-01-01
  • 2021-09-20
  • 2018-02-06
  • 2020-05-24
  • 1970-01-01
  • 2021-02-05
  • 2020-05-20
  • 2022-10-21
相关资源
最近更新 更多