CMake find_library匹配行为?

时间:2013-01-09 17:59:33

标签: cmake

一个指定find_library(名称PATHS path1..pathn)

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

例如,我无法让find_library在提供的GraphicsMagicK的Windows二进制安装中识别MagicK和MagicK ++ dll文件:

文件是:CORE_RL_magick_.dll

搜索查询:

magick CORE_RL_magick

不起作用。

2 个答案:

答案 0 :(得分:14)

您可能需要查看此文档链接:

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_PREFIXESCMAKE_FIND_LIBRARY_SUFIXESproject() command自动设置,因此首先调用它并在此点之后find_library()是比手动设置变量更好的解决方案。

答案 1 :(得分:0)

Why not use find_file() instead of find_library() if you want to find a .dll.