Link 要在 cmake 中定位的 poco 静态库

Link poco static library to target in cmake

我读了很多 post 但我还不太了解如何 link 我的目标是库的静态版本。

我的项目依赖于 poco 库,而在 linux 中,它们存储在 /usr/local/lib(静态和共享版本)中,在我的 windows 机器中,它们在 d:\libs\poco\lib 和 d:\libs\poco\bin (我有一个名为 POCO_DIR = D:\libs\poco 的环境变量)

那么,我怎样才能在 cmake 文件中编写 find_library() 指令?

提前致谢。

您永远不会 link 在 windows 上使用 Poco DLL,即使您使用共享的 Poco 库也是如此。链接总是与 %POCO_BASE%/lib 中的条目。对于共享构建,.lib 只是一个存根 ("import library"),负责在运行时加载 DLL。有关其工作原理的详细信息,请参阅 Linking Implicitly

Poco 静态库可以通过文件名与 DLL 的导入库区分开来 - 静态库有 "mt"("mtd" 用于调试二进制文件,"md" 和 "mdd" 当使用运行时库 DLL 时)附加到名称。因此 PocoFoundation.dll 的导入库将命名为 PocoFoundation.lib,而使用静态运行时的静态库将命名为 PocoFoundationmt.lib。使用动态运行时的静态库是 PocoFoundationmd.lib。有关详细信息,请参阅 Use Run-Time Library

至于CMake,我不是专家,但是例如static Foundation 和 Net 库应该是这样的:

FIND_LIBRARY(Poco_LIBRARIES NAMES PocoFoundationmt PocoNetmt PATH_SUFFIXES ${POCO_DIR}/lib)

编辑:如果您在项目中定义 POCO_STATIC,静态 linking 将自动通过库头文件,参见例如Foundation.h