一个指定find_library(名称PATHS path1..pathn)
我的问题是find_library如何匹配库文件的名称(在Windows和Linux上)?
例如,我无法让find_library在提供的GraphicsMagicK的Windows二进制安装中识别MagicK和MagicK ++ dll文件:
文件是:CORE_RL_magick_.dll
搜索查询:
magick CORE_RL_magick
不起作用。
答案 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_PREFIXES
和CMAKE_FIND_LIBRARY_SUFIXES
由project()
command自动设置,因此首先调用它并在此点之后find_library()
是比手动设置变量更好的解决方案。
答案 1 :(得分:0)
Why not use find_file()
instead of find_library()
if you want to find a .dll.