c++ - cmake - find_library - 自定义库位置

标签 c++ windows cmake

我目前正在尝试让 CMake 为我的项目运行(在 Windows 上)。我想使用安装所有库的自定义位置。为了让 CMake 知道这条路径,我尝试这样做:

set(CMAKE_PREFIX_PATH D:/develop/cmake/libs)

但是当我试图找到图书馆时

find_library(CURL_LIBRARY NAMES curl curllib libcurl_imp curllib_static)

CMake 找不到它。 当我将前缀路径设置为

set(CMAKE_PREFIX_PATH D:/develop/cmake/libs/curl)

...图书馆位于。

所以我的问题是: 如何正确配置 CMake 以在自定义位置使用目录结构,如下所示:

D:/develop/cmake/libs/
-> libA
   -> include
   -> lib
-> libB
   -> include
   -> lib
-> ...
   -> include
   -> lib

在“include”中是公共(public)头文件,在“lib”中是编译的库。

希望有人可以帮助我 - 在此先感谢

编辑: 我目前的解决方法是,在我搜索库之前执行此操作:

set(CUSTOM_LIBRARY_PATH D:/develop/cmake/libs)
file(GLOB sub-dir ${CUSTOM_LIBRARY_PATH}/*)
foreach(dir ${sub-dir})
    if(IS_DIRECTORY ${dir})
        set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH};${dir})
    endif()
endforeach()

但是那样boost的默认模块直到它才会找到它,因为boost的目录结构有点不同。

boost -> include -> boost-1_50 -> *.hpp

当我将内容移动到“boost-1_50”到“包含”时,可以找到该库,但这样就无法处理多个版本,对吧?

最佳答案

最简单的解决方案可能是将 HINTS 添加到每个 find_*请求。

例如:

find_library(CURL_LIBRARY
    NAMES curl curllib libcurl_imp curllib_static
    HINTS "${CMAKE_PREFIX_PATH}/curl/lib"
)

对于 Boost,我强烈建议使用 FindBoost标准模块并将 BOOST_DIR 变量设置为指向您的 Boost 库。

关于c++ - cmake - find_library - 自定义库位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075371/

相关文章:

CMake:Fortran 模块和编译顺序

c++ - 使用 SFINAE 禁用模板类成员函数

c++ - 使用 SetUnhandledExceptionFilter 捕获 OpenMP 异常

windows - 如何使用 VBS 脚本从 .ini 文件中删除一行

windows - ACM - 音频压缩管理器

c++ - 将我的主输出库与我的测试可执行文件链接时出现问题

c++ - Magick++ 不读取图像

c++ - 未使用的变量 'class' [-Wunused-variable] - 错误/警告

c++ - 如何在C++ XE2中监听用IWebBrowser2运行IE的事件?

c++ - SDL C++ 类函数错误