- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 cmake 的 find_library
函数的文档中,我们有
The CMake variable CMAKE_FIND_ROOT_PATH specifies one or more directories to be prepended to all other search directories. This effectively “re-roots” the entire search under given locations. Paths which are descendants of the CMAKE_STAGING_PREFIX are excluded from this re-rooting, because that variable is always a path on the host system. By default the CMAKE_FIND_ROOT_PATH is empty.
The CMAKE_SYSROOT variable can also be used to specify exactly one directory to use as a prefix. Setting CMAKE_SYSROOT also has other effects. See the documentation for that variable for more.
These variables are especially useful when cross-compiling to point to the root directory of the target environment and CMake will search there too. By default at first the directories listed in CMAKE_FIND_ROOT_PATH are searched, then the CMAKE_SYSROOT directory is searched, and then the non-rooted directories will be searched. The default behavior can be adjusted by setting CMAKE_FIND_ROOT_PATH_MODE_LIBRARY. This behavior can be manually overridden on a per-call basis. By using CMAKE_FIND_ROOT_PATH_BOTH the search order will be as described above. If NO_CMAKE_FIND_ROOT_PATH is used then CMAKE_FIND_ROOT_PATH will not be used. If ONLY_CMAKE_FIND_ROOT_PATH is used then only the re-rooted directories and directories below CMAKE_STAGING_PREFIX will be searched.
(参见 http://www.cmake.org/cmake/help/v3.0/command/find_library.html)
我不确定你是怎么读的,但对我来说,这似乎暗示 find_library
将使用 CMAKE_FIND_ROOT_PATH
来查找库。我编写了以下 cmakelists.txt
:
cmake_minimum_required( VERSION 3.0 )
project( "cmakefindlibtest" )
message( "CMAKE_FIND_ROOT_PATH is ${CMAKE_FIND_ROOT_PATH}" )
list( APPEND CMAKE_FIND_ROOT_PATH "C:/DEV/lib/" )
message( "CMAKE_FIND_ROOT_PATH is now ${CMAKE_FIND_ROOT_PATH}" )
#find_library( punycode_library_test punycode PATHS "C:/DEV/lib" )
find_library( punycode_library_test punycode )
message( "punycode_library_test is now ${punycode_library_test}" )
add_executable( cmakefindlibtest main.cpp )
target_link_libraries( cmakefindlibtest ${punycode_library_test} )
main.cpp
只是 Hello World 。在 C:\DEV\lib
中,我放置了一个名为 punycode.lib
的库(这是在 Windows 上)。我已将 CMAKE_FIND_ROOT_PATH
指向该目录。然后当我调用 find_library
时,我得到:
c:\DEV\cmakefindtest\_build>cmake ..
-- Building for: Visual Studio 11 2012
CMAKE_FIND_ROOT_PATH is
CMAKE_FIND_ROOT_PATH is now C:/DEV/lib/
punycode_library_test is now punycode_library_test-NOTFOUND
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
punycode_library_test
linked by target "cmakefindlibtest" in directory C:/DEV/cmakefindtest
-- Configuring incomplete, errors occurred!
See also "C:/DEV/cmakefindtest/_build/CMakeFiles/CMakeOutput.log".
请注意,当我将目录添加到 find_library
调用的 PATHS 部分时
find_library( punycode_library_test punycode PATHS "C:/DEV/lib" )
一切正常:
c:\DEV\cmakefindtest\_build>cmake ..
-- Building for: Visual Studio 11 2012
CMAKE_FIND_ROOT_PATH is
CMAKE_FIND_ROOT_PATH is now C:/DEV/lib/
punycode_library_test is now C:/DEV/lib/punycode.lib
-- Configuring done
-- Generating done
-- Build files have been written to: C:/DEV/cmakefindtest/_build
那么 find_library
只是不使用 CMAKE_FIND_ROOT_PATH
吗?
更新:
根据 http://public.kitware.com/pipermail/cmake-developers/2012-January/002850.html,看起来 CMAKE_LIBRARY_PATH 主要做了我想要它在这里做的事情,看起来这就是我应该在这种情况下使用它的原因。
但是,我仍在尝试弄清楚为什么 CMAKE_FIND_ROOT_PATH
不适用于 find_library
。 http://www.cmake.org/Wiki/CMake_Cross_Compiling 处的文档说到 CMAKE_FIND_ROOT_PATH
,
this is a list of directories, each of the directories listed there will be prepended to each of the search directories of every FIND_XXX() command.
在这种情况下这似乎不是真的,除非我错过了某种设置或其他变量。
最佳答案
首先,CMAKE_FIND_ROOT_PATH
将被添加到 docs of find_library 中描述的一组特定目录中。 .它不会添加到您为 find_library
指定的文件名之前。
您只需要使用CMAKE_FIND_ROOT_PATH
进行交叉编译。例如,虽然 find_library(.. jpeg ...)
会找到 /usr/lib/libjpeg.so
,但您可以使用 set(CMAKE_FIND_ROOT_PATH ~/my_toolchain)
来查找 ~/my_toolchain/usr/lib/libjpeg.so
。
因为你没有提到你正在交叉编译你可能需要的是 CMAKE_PREFIX_PATH
.尝试 set(CMAKE_PREFIX_PATH "c:/DEV")
或 set(CMAKE_LIBRARY_PATH "c:/DEV/lib")
进行 find_library
搜索c:/DEV/lib
.
关于c++ - cmake find_library 和 CMAKE_FIND_ROOT_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24659753/
这has been asked on SO before甚至还有 a related bug on this in CMAKE .但是,我的问题是变体,答案不明确。 我的问题是我正在使用 MinGW
一指定find_library( name PATHS path1..pathn) 我的问题是如何find_library()将名称与库文件匹配(在 Windows 和 Linux 上)? 例如,我无
CMake的find_library如何处理“libFOO.so.3.2”中的版本号?有些库有从 libFOO.so 到正确版本的符号链接(symbolic link),有些则没有。 当我只使用 fi
在我的项目中,我使用了 differend 3rd 库,这些库已经预先构建并添加到 external-debs 子目录中。我使用多个 FindXXX CMake 脚本来定位这些需求。 当我尝试定位 F
我想出了以下 super 简单的 FindMAGMA.cmake 脚本来查找 MAGMA 库,因为周围没有: # - Find the MAGMA library # # Usage: # fin
是否可以调试find_library来自 CMake? 我想要的是经过考虑的路径列表。我的用例是一个像 find_library (FOO_LIBRARY NAMES fo
我的目标是通过 CMake 链接库/usr/lib/libboinc_api.a 和/usr/lib/libboinc.a。因此,我使用不同 FIND_XXXX 模块中给出的示例并尝试: FI
我目前正在创建一组应该在 使用 CLion 的不同项目。我的问题是如何实现这个 功能。 到目前为止,我研究了以下相关问题 这并没有真正解决我的问题: CMake link to external li
在我的 CMake 脚本中,我必须链接到一个库,该库可以有两个不同的名称,具体取决于缓存变量。 库可以是 libMyLibrary.a 或 libMyLibraryCUDA.a,具体取决于 CUDA_
我正在尝试使用来自 ctypes 的命令 find_library() 但我收到一个错误,我不明白它的原因。我在 Windows 上工作 这是代码: import ctypes from ctypes
我目前正在尝试让 CMake 为我的项目运行(在 Windows 上)。我想使用安装所有库的自定义位置。为了让 CMake 知道这条路径,我尝试这样做: set(CMAKE_PREFIX_PATH D
我正在使用 CMake 2.8.2版本。该项目使用了大量外部文件和自定义库(无法通过 find_package 获得),并且有一长串元素,如下所示: find_path(XXX_INCLUDE_DIR
在 cmake 的 find_library 函数的文档中,我们有 The CMake variable CMAKE_FIND_ROOT_PATH specifies one or more dire
这个问题在这里已经有了答案: How to strip trailing whitespace in CMake variable? (4 个回答) 4年前关闭。 我的 CMakeLists.txt
尽管阅读了文档,但我无法弄清楚 CMake 的命令是否为 find_library是否搜索 LD_LIBRARY_PATH 中列出的目录。 我的测试给出了不同的结果。 最佳答案 来自文档(我没有转载与
我用了 list存储库的名称,我想使用 foreach和 find_library找到每个库的完整路径。但是find_library刚刚返回第一个库的路径。我查了 this post ,但问题依然存在
我有一个名为 mylib 的 catkin 库,我用 catkin build 构建了它此外,我有一个节点,其中使用了该库中的函数。我像往常一样在节点的 CMakeLists.txt 中启用此链接:
我在默认安装了 glew 1.10 的 Ubuntu 14.04 上。我想使用最新的 glew 1.13,但是 sudo apt-get remove libglew1.10 不是一个选项,因为 ub
我正在尝试学习 CMake。我有《掌握 CMake》一书,我正在尝试完成我的第一个“简单”教程。 Using CMake: Hello World Example 我顺利地完成了第一部分,但是当我尝试
[注意:这几乎是 Linking to a library that hasn't been built yet with CMake 的副本, 但在这种情况下,未构建的库来自 ADD_CUSTOM_
我是一名优秀的程序员,十分优秀!