首页 > 解决方案 > 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 链接到正确的文件名?

标签: cmake

解决方案


看来您可能IMPORTED_LOCATION错误地使用了目标属性。从文档中,此属性应设置为:

IMPORTED 目标的磁盘上主文件的完整路径。

因此,您需要设置库的完整路径,包括库名称:

set_target_properties(import_target PROPERTIES IMPORTED_LOCATION "C:/full/path/to/libs/import.lib")

推荐阅读