您什么时候使用find_path
When would you use find_path?
我正在逆向某人的代码,我遇到了类似的行
FIND_PATH(OPENSSL_INCLUDE_DIR openssl/ssl.h
/usr/local/opt/openssl/include
/usr/opt/openssl/include
/usr/local/include/openssl
/usr/include/openssl
/usr/local/include
/usr/include
)
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
FIND_LIBRARY(LIB_CRYPTO crypto PATHS
/usr/local/opt/openssl/lib
/usr/opt/openssl/lib
/usr/local/lib
/usr/local/openssl/lib
/usr/lib
/usr/lib/openssl
)
我来自制造背景,所以我会使用诸如LDFLAGS=$(shell pkg-config --cflags --libs openssl
之类的东西,但是我永远不会知道包含哪个标头文件。
知道一个链接OpenCV和CUDA库的大型DLIB项目,似乎不切实际/不可行,所以我的问题是:
何时/为什么您实际上以名称引用标题文件?
cmake需要支持pkg-config
不可用的平台。
您是正确的,发现机构有些原始。这就是为什么Cmake还提供更复杂的选项,例如Config-File软件包甚至pkg-config
支持。所有这些方法的问题在于它们需要一些外部支持之王。您要找到的依赖项必须提供包配置脚本,并且必须在您尝试构建的平台上正确配置pkg-config
。
各种find_*
命令没有这样的先决条件。他们只是尝试找到文件或文件系统目录。这就是使它们在某种程度上成为最强大的命令的原因,因为您可以始终接受用户提供的提示(您示例代码中的人在 not 中do btw,所以羞耻在他们身上(然后发现可以发挥其魔力。但这也是最不便的,因为在实践中很容易混乱和乏味。
请记住,CMAKE的主要目标是便携式。不要回避平台提供的任何机制,以使配置构建更方便,也不要锁定那些不幸的人,并且必须在无法使用这些机制的平台上工作。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 错误"Could not find Boost"(缺少:上下文标头)
- /usr/bin/ld: cannot find -lc++
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 使用 find 解析文件会给出不同文件的奇怪结果
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- Cannot find -lglad
- "Cannot find -l<directory>"错误 - CMake
- 为什么在向量上使用 std::find() 时会出现错误?
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++ find() 在存储为变量时返回不同的值
- set::find 查找不存在的元素
- 使用 std::find 时没有匹配的函数调用错误
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 构建 vcxproj 文件给我一个无信息的错误"The system cannot find the path specified"
- 为什么我会收到错误"configure: error: Cannot find glib: Is glib-config in path?"?