cmake find_包脚本仅在Linux中失败
我为(SNAP)编写了一个包查找模块,该模块在macOS上正常工作,但在Linux上失败。出于某种原因,它报告说,尽管找到了相关的路径/文件,但没有找到SNAPcmake 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
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
后缀作为第一个参数,那么这个问题将是有用的。