c++ - CMake VisualStudio 找不到库
问题描述
对于为我的多媒体项目创建可执行文件的最后一步,我的 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 这样做?
解决方案
正确的方法是首先使用FindLibrary
:
find_library (glfw3dll_LIBRARY NAMES glfw3dll PATHS ${PROJECT_SOURCE_DIR}/lib/win)
然后使用它:
target_link_libraries(project ${glfw3dll_LIBRARY})
这有几个优点:
- 您知道在 CMake 运行时是否正确找到了该库,
- 由于您有一个变量,因此当您找到所有库时,平台的所有测试都归入设置。
推荐阅读
- c# - 如何绑定到 WPF 中的 UpdateSourceTrigger?
- python - 两行在 matplotlib 中使用不同的 xticks 共享一个不可见的 xdata
- sql - 按具有相同值的列分组
- rstan - rstan() 不应该在#'@example 中运行?
- amazon-web-services - 如何验证 AWS Redis 传输中和静态加密?
- ios - 信标测距与 BLE 扫描
- php - 用表单编辑实体部分
- mysql - 需要显示来自 2 个单独表的匹配记录
- spring - 如何在spring boot oauth2中自定义jwt解码器
- html - 为什么无法加载来自 favicon generator 的 favicon?