我目前正在尝试让 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/