15

一指定find_library(<var> name PATHS path1..pathn)

我的问题是如何find_library()将名称与库文件匹配(在 Windows 和 Linux 上)?

例如,我无法find_library()识别所提供的 GraphicsMagicK Windows 二进制安装中的 MagicK 和 MagicK++ DLL 文件:

这些文件是:CORE_RL_magick_.dll

搜索查询:magickCORE_RL_magick不起作用。

4

2 回答 2

24

您可能想查看此文档链接:

http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command:find_library

http://www.cmake.org/cmake/help/v2.8.10/cmake.html#variable:CMAKE_FIND_LIBRARY_PREFIXES

http://www.cmake.org/cmake/help/v2.8.10/cmake.html#variable:CMAKE_FIND_LIBRARY_SUFFIXES

find_library 可以接受一个或多个库名称。这些名称会附加 CMAKE_FIND_LIBRARY_PREFIXES 和附加 CMAKE_FIND_LIBRARY_SUFFIXES 的值。应该为每个操作系统设置这两个变量,具体取决于库的前缀或后缀方式。

在你的情况下,我会为 Windows 写

SET(CMAKE_FIND_LIBRARY_PREFIXES "")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")

对于 Linux

SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")

然后写

find_library(
    magick
    CORE_RL_magick_ (or NAMES if there are multiple names for the same library on different systems)

    PATHS
      path1
      path2
    ...
    (other options that are specified in documentation and would be usefull to you)
)

编辑:

CMAKE_FIND_LIBRARY_PREFIXES并由命令CMAKE_FIND_LIBRARY_SUFIXES自动设置,因此先调用它然后再调用它是比手动设置变量更好的解决方案。project()find_library()

于 2013-01-10T00:00:58.840 回答
1

如果您想查找 .dll ,为什么不使用find_file()而不是。find_library()

于 2018-09-19T08:20:40.440 回答