cmake检查库是否是静态的

时间:2011-03-23 14:27:30

标签: 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})

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


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

2 个答案:

答案 0 :(得分:2)

如果将库正确添加为目标,则应该可以执行以下操作。

get_target_property(target_type your_target_name TYPE)
if (target_type STREQUAL STATIC_LIBRARY)
  ...

有关详细信息,请参见TYPE

答案 1 :(得分:0)

这没有cmake方法。大多数find_package脚本都是从文件名派生出来的:许多库将静态库与预修复或后修复区分开来:

作为解决方法,您可以尝试运行工具dumpbin并检查函数是否已导出...

dumpbin /exports QuantLib.lib

如果这给你一个很长的导出列表,它很可能是一个dll,否则是一个静态的lib。