您什么时候使用find_path

When would you use find_path?

本文关键字:path find 什么时候      更新时间:2023-10-16

我正在逆向某人的代码,我遇到了类似的行

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的主要目标是便携式。不要回避平台提供的任何机制,以使配置构建更方便,也不要锁定那些不幸的人,并且必须在无法使用这些机制的平台上工作。