cmake - CMake find_library 在 MSVC 上找不到现有库
问题描述
我做了一个项目并尝试使用 CMake 在 GCC (Linux) 和 MinGW (Windows) 下构建它。现在我试图在 Visual Studio 2019 下做同样的事情(出于某种原因),似乎 VS 附带的 CMake 找不到随 MSVC 安装的库。
我正在使用一个脚本,不幸的是我在网上找不到了,所以我不能给你一个链接。但我试图找出导致问题的原因。所以,这里是代码:
if(MY_LIB_PATH)
set(MYLIB_NO_DEFAULT_PATH_CMD NO_DEFAULT_PATH)
endif()
find_library(MY_LIBRARY
NAMES myLibrary
HINTS
ENV MY_ENV
${MYLIB_NO_DEFAULT_PATH_CMD}
PATH_SUFFIXES lib lib/x64
PATHS ${MY_LIB_PATH}
DOC ""
)
(代码比这复杂得多,但这就是所有变量替换后的样子)
如果我不设置MY_LIB_PATH
变量,它将找不到库(位于lib/x64
MSVC 安装文件夹中的文件夹中)。但是当我这样调用 CMake 时:
cmake "-DMY_LIB_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64"
它“奇迹般地”找到了它。
是的,它可以工作,但是...... CMake 不是为了避免首先编写所有路径而设计的吗?此外,还有一个问题:我的项目中有很多这样的库,所有这些库都使用上面相同的代码进行查找,并且我必须多次编写所有路径,以便 CMake 可以找到它们。
要么我的 CMake 脚本的作者做错了什么,要么我安装了我的库,而不是 CMake 所期望的。
解决方案
推荐阅读
- mqtt - mqtt 接收器未获取数据
- xml - 如何从逗号分隔列表中获取最大/最小日期
- mysql - 检查原始表中是否存在外键是否有意义?
- vue.js - 组件通信的 VUETIFY 问题(道具/事件 - 父子通信)
- google-apps-script - 循环浏览具有动态范围的 Google 表格中的所有条目
- amazon-web-services - 如何生成永久 s3 对象/文件 url(没有过期)?
- sql - oracle sql运行总范围
- android - Android语音通话:将电话号码作为参数放入TwIML params map
- mysql - 如何在 MySql 中按日期顺序显示最近添加的数据?
- scala - 如何使用 Scala 在 Spark 中转换为时间戳,例如 2019-03-25T00:27:46.985-0500 到 2019-03-25 00:27:46