CMake文件似乎很清楚:除非指定了NO_DEFAULT_PATH
,否则cmake会首先搜索一堆默认路径,如果找不到该库,则只有才会在目录中查找在PATHS
中列出。存在一些其他NO_*
,仅排除 some 个cmake默认路径。
我知道如何克服这种行为。例如,我可以执行建议的here,即进行两次搜索:第一次进行NO_DEFAULT_PATH
,第二次不进行搜索。如果第一个成功,则第二个将被跳过。赢。
但是,这个问题不是关于如何实现我想要的东西(我知道该技巧)。问题是为什么?为什么cmake不在提供的路径中优先显示?在我看来,先使用这些提示是合乎逻辑的:如果用户指定了一些提示,也许我应该先使用那些提示,如果它们不起作用,则使用默认值...
在当前的实现中是否缺少我的充分理由?我会这样假设,我怀疑cmake的人们会无缘无故地做事...
编辑:当我说“用户正在指定一些提示”时,我并不是指HINTS
的实际find_library
参数。它更像是泛型的“提示”。但是,正如注释中所建议的,HINTS
实际上在系统路径之前被扫描。我的担心来自cmake的文档:
搜索“提示”选项指定的路径。这些应该是路径 由系统自省计算,例如 已经找到另一个项目的位置。硬编码的猜测应该是 使用PATHS选项指定。
HINTS
并非旨在接收硬编码的完整路径这一事实,使我觉得将来可能会触发,因此我不确定这是否是解决方案。但是也许是吗?