Cmake VisualStudio找不到库
CMake VisualStudio can not find library
对于为我的多媒体项目创建可执行文件的最后一步,我在我的一个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 Studio2017CommunityCommon7IDECMakeLists.txt C:Program Files (x86)Microsoft Visual Studio2017CommunityCommon7IDELINK 1
(是的,GLFW的CMAKE项目生成的文件称为" Glfw3dll.lib")
我可以使用:
与每个库进行硬链接target_link_libraries(project ${PROJECT_SOURCE_DIR}/lib/win/glfw3dll.lib)
对于每个图书馆
当然,还需要将相应的库复制到最终构建中并安装目录以部署软件。我该如何告诉Cmake这样做?
正确的方法是首先使用FindLibrary
:
find_library (glfw3dll_LIBRARY NAMES glfw3dll PATHS ${PROJECT_SOURCE_DIR}/lib/win)
然后使用它:
target_link_libraries(project ${glfw3dll_LIBRARY})
这有一些优点:
- 您在CMAKE运行时间知道是否正确找到了库,
- 由于您有一个变量,当您找到所有库时,所有平台的测试都会降级为设置。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- vcpkg 添加新库,但找不到
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 找不到Linux Visual Studio代码C++文件