cmake 检查库是否是静态的

edA*_*a-y 6 cmake

有没有办法检查找到的库是否是静态库?为了找到图书馆,我这样做:

IF(WIN32)
    SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib)
ELSE()
    SET(CMAKE_FIND_LIBRARY_SUFFIXES .a)
ENDIF()
find_library(QUANTLIB_LIBRARY NAMES QuantLib PATHS ${QUANTLIB_LIBRARY_SEARCH})
Run Code Online (Sandbox Code Playgroud)

但在 Windows 上,a.lib可能是 DLL 的符号文件。我需要确保这实际上是库的静态形式,否则稍后链接将导致难以理解的错误消息。


如果您想知道,我真的不想使用 satic 库,但是 QuantLib 在多线程和共享库方面已被破坏。这是我让它正常工作的最佳机会:静态链接到我的共享库之一。

Tim*_*mmm 7

如果库被正确添加为目标,你应该能够做这样的事情。

get_target_property(target_type your_target_name TYPE)
if (target_type STREQUAL STATIC_LIBRARY)
  ...
Run Code Online (Sandbox Code Playgroud)

详情请参阅TYPE

  • 这就是票。它甚至适用于导入的库(使用 find_package) - 毕竟,这些库提供了一个只执行 `add_library(... STATIC)` 的 .cmake 文件:) (2认同)