【发布时间】:2019-07-16 12:05:15
【问题描述】:
确保 cmake 仅从特定根目录查找库和头文件的最佳方法是什么。
假设:
- 我们只想查看特定目录(例如:/mysdkroot/)
- 我们希望忽略所有不在特定目录中的文件(例如,不应使用 /usr/lib 或 /usr/include,仅使用 /mysdkroot/)
- 使用库提供的 find_package() 功能,而不是在我们的 cmake 上查找特定的文件或头文件
- 我们不编辑库制造商提供的 FindXXX.cmake 或 xxxConfig.cmake
- 重要的是,我不想编辑每个查找包/文件/lib 调用,指定要搜索的路径
我可以使用 NO_DEFAULT_PATH 完成一半并指定查找路径,但我无法对此提供完整的证明解决方案,因为我总是依赖于 FindXXX.cmake 或 xxxConfig.cmake 的实现方式。例如,如果调试/发布文件具有不同的名称,例如在我的 /mysdkroot/ 中,我只有调试文件并且在系统中只存在发布,那么对于某些库,它可能会首先找到发布,而不是首先找到调试和其他问题,因为我无法将搜索范围缩小到仅该文件夹。
【问题讨论】:
-
您是否尝试将
CMAKE_PREFIX_PATH设置为您的sdk 根目录并禁用所有其他find_package搜索提示? cmake doc 提供跳过某些位置的所有参数。 -
是的,我忘了提到 CMAKE_PREFIX_PATH,这是所有这些工作的基础,正如 Guillaume 所提到的,带有 find_xxx 标志的我们获得了我们想要的,但这需要做很多工作获得一个应该是 cmake 原生的功能