cmake - CMake:如何将具有不同文件名的导入库链接到库名
问题描述
我正在尝试使用 Cmake 链接外部构建的库以创建 Visual Studio 解决方案。对于我的可执行文件,我使用:
target_link_libraries( exe_target import_target )
并且导入目标声明为:
add_library(import_target STATIC IMPORTED)
的文件名import_target
是 import.lib,所以我使用:
set_target_properties(import_target PROPERTIES IMPORTED_LOCATION "import.lib")
但是当我生成项目时,我生成的可执行文件会尝试与“import_target.lib”链接。CMake 文档中列出的所有IMPORTED_
属性似乎都对此没有任何影响(例如,IMPORTED_IMPLIB
对于共享库)。它表现得好像import_target
不是目标,而是 .lib 文件的简单文件名。
更新:需要明确的是,导入目标是在打算使用它的可执行文件之前定义的。
此外,导入的目标不会作为项目出现在我生成的 Visual Studio .sln 中,这可能很重要,也可能不重要。
更新 2:在更深入的调查中,导入的目标是在创建它的 CMakeLists.txt 的范围内定义的。但是在父 CMakeLists.txt 和其他后续文件中,它是未定义的,与非导入目标相反。
我需要做什么才能强制 CMake 链接到正确的文件名?
解决方案
看来您可能IMPORTED_LOCATION
错误地使用了目标属性。从文档中,此属性应设置为:
IMPORTED 目标的磁盘上主文件的完整路径。
因此,您需要设置库的完整路径,包括库名称:
set_target_properties(import_target PROPERTIES IMPORTED_LOCATION "C:/full/path/to/libs/import.lib")
推荐阅读
- javascript - Javascript 日期创建差异 - 在 IE 与 chrome 中
- ios - 检查App可以使用的iCloud Free Space
- python - 我正在尝试将 61 更改为十六进制,但我必须得到“3D”,但我有“313”。怎么了?
- vue.js - 如何在 PWA 模式下移除 Nuxt 加载页面
- vue.js - Vuejs - 引用的对象表示法
- c# - 如果实体(集合父级)为空,如何将 linq 中的空集合返回到 sql
- python - 在 Python 中可视化高维数据
- sql - 聚合 func + 多个连接的异常行为
- c# - 是否有关于 IPInnable 和 GetPinnableReference() 的文档?
- android-studio - showModalBottomSheet 性能问题大约需要 3 秒才会出现