cmake find_包脚本仅在Linux中失败

cmake find_包脚本仅在Linux中失败,cmake,Cmake,我为(SNAP)编写了一个包查找模块,该模块在macOS上正常工作,但在Linux上失败。出于某种原因,它报告说,尽管找到了相关的路径/文件,但没有找到SNAP FindSnap.cmake: include(FindPackageHandleStandardArgs) set(Snap_ROOT_DIR $ENV{WORKSPACE_ROOT}/opt/Snap) message(STATUS "Snap_ROOT_DIR: " ${Snap_ROOT_DIR}) find_path(Sna

我为(SNAP)编写了一个包查找模块,该模块在macOS上正常工作,但在Linux上失败。出于某种原因,它报告说,尽管找到了相关的路径/文件,但没有找到SNAP

FindSnap.cmake

include(FindPackageHandleStandardArgs)
set(Snap_ROOT_DIR $ENV{WORKSPACE_ROOT}/opt/Snap)
message(STATUS "Snap_ROOT_DIR: " ${Snap_ROOT_DIR})

find_path(Snap_CORE
        NAMES "Snap.h"
        PATH_SUFFIXES snap-core
        HINTS ${Snap_ROOT_DIR}
        DOC "The Snap include directory")
message(STATUS "Snap core: " ${Snap_CORE})

find_path(Snap_GLIB_CORE
        NAMES "base.h"
        PATH_SUFFIXES glib-core
        HINTS ${Snap_ROOT_DIR}
        DOC "The Snap GLib include directory")
message(STATUS "Glib core: " ${Snap_GLIB_CORE})

find_library(Snap_LIBRARY
        NAMES libsnap.a
        HINTS ${Snap_ROOT_DIR}/snap-core
        DOC "The Snap library")
message(STATUS "Snap Library: " ${Snap_LIBRARY})

find_package_handle_standard_args(Snap_FOUND DEFAULT_MSG
        Snap_CORE
        Snap_GLIB_CORE
        Snap_LIBRARY)

if (Snap_FOUND)
    set(Snap_LIBRARIES ${Snap_LIBRARY})
    set(Snap_INCLUDE_DIRS ${Snap_CORE} ${Snap_GLIB_CORE})
    set(Snap_DEFINITIONS)
    message(STATUS "Snap Found: " ${Snap_INCLUDE_DIRS})
else()
    message(FATAL_ERROR "Package Snap not found")
endif (Snap_FOUND)

mark_as_advanced(Snap_ROOT_DIR Snap_INCLUDE_DIR Snap_LIBRARY)
在macOS上,Snap安装在
/opt/Snap
中,此脚本通过
查找包(需要Snap)
CMakeLists.txt
调用。在macOS上,这非常有效,但是在Ubuntu上,脚本报告找不到Snap,即使路径
Snap\u CORE
Snap\u GLIB\u CORE
Snap\u LIBRARY
似乎已经找到。在mac上,我使用的是cmake版本3.10.2,在Linux上,我尝试了版本2.8和3.9,但仍然有相同的错误

由于我无法在Linux机器上修改
/opt
,因此我在别处安装了Snap,并将第二行的Snap根目录修改为:

set(Snap_ROOT_DIR $ENV{WORKSPACE_ROOT}/elsewhere/Snap)
Linux计算机上给出的错误:

-- Snap_ROOT_DIR: /afs/cs.stanford.edu/u/jdeaton/repos/snap
-- Snap core: /afs/cs.stanford.edu/u/jdeaton/repos/snap/snap-core
-- Glib core: /afs/cs.stanford.edu/u/jdeaton/repos/snap/glib-core
-- Snap Library: /afs/cs.stanford.edu/u/jdeaton/repos/snap/snap-core/libsnap.a
-- Found Snap_FOUND: /afs/cs.stanford.edu/u/jdeaton/repos/snap/snap-core
CMake Error at cmake/FindSnap.cmake:43 (message):
  Package Snap not found
Call Stack (most recent call first):
  CMakeLists.txt:6 (find_package)
看起来这应该可以很好地工作,但不知何故它不工作,只在Linux上失败


谢谢大家!

find\u package\u handle\u standard\u args的第一个参数应该是
Snap
,而不是
Snap\u FOUND

 find_package_handle_standard_args(Snap DEFAULT_MSG
    Snap_CORE
    Snap_GLIB_CORE
    Snap_LIBRARY)

您当前对脚本结果的描述不太清楚。提供脚本的精确输出。@Tsyvarev很好。我添加了精确的输出。嗯,输出
Found Snap\u Found
看起来很奇怪。它应该是
找到的快照
。您是否尝试将
Snap\u FOUND
作为
find\u package\u handle\u standard\u args
的第一个参数传递?您是否尝试过清除缓存(从生成目录中删除
cmakcache.txt
)?哦,天哪。完全是这样。我传递的是
Snap\u FOUND
,而不是
Snap
。改变这一点完全解决了问题。非常感谢。很乐意帮忙。如果它实际上是一个拼写错误,请随意删除该问题-拼写错误几乎不会被谷歌搜索到,因此该问题不太可能帮助其他人。但是,如果您假设其他人可能错误地阅读了文档,并故意使用
\u FOUND
后缀作为第一个参数,那么这个问题将是有用的。