如何创建合适的Find***.cmake文件

如何创建合适的Find***.cmake文件,cmake,Cmake,我为我的项目编写了一个简单的Find***.cmake文件,在Windows上运行良好 if(WIN32) find_path(Shaderc_INCLUDE_DIR NAMES shaderc/shaderc.hpp PATH "$ENV{VULKAN_SDK}/Include") find_library(Shaderc_LIBRARY NAMES shaderc_combined

我为我的项目编写了一个简单的Find***.cmake文件,在Windows上运行良好

if(WIN32)
    find_path(Shaderc_INCLUDE_DIR
            NAMES shaderc/shaderc.hpp
            PATH "$ENV{VULKAN_SDK}/Include")
    find_library(Shaderc_LIBRARY
            NAMES shaderc_combined
            PATH "$ENV{VULKAN_SDK}/Lib")
elseif(UNIX)
    find_path(Shaderc_INCLUDE_DIR
            NAMES shaderc/shaderc.hpp
            PATH "$ENV{SHADERC_DIR}/include")
    find_library(Shaderc_LIBRARY
            NAMES libshaderc_combined
            PATH "$ENV{SHADERC_DIR}/lib")
endif()
set(Shaderc_INCLUDE_DIRS ${Shaderc_INCLUDE_DIR})
set(Shaderc_LIBRARIES ${Shaderc_LIBRARY})
,但在Linux上抛出一个错误。错误消息是:

CMake错误:此项目中使用了以下变量,但是 它们被设置为NOTFOUND。请设置它们或确保它们已设置 并在CMake文件中正确测试:Shaderc_库

如果我把这段代码复制到我的主CMakeLists文件中,它在Linux上也能很好地编译。我做错了什么?为此在Linux上使用环境变量是一种不好的做法吗


谢谢你的帮助

从代码判断,您的模块在环境变量指定的目录中查找


相反,您应该让它在众所周知的地方搜索,如
/usr/lib
/usr/local/lib

欢迎使用堆栈溢出!“不起作用”的描述不是我们可以帮助您的描述。究竟是如何观察到这种“不起作用”的?你收到错误信息了吗?或者某个变量的值错误?请把问题贴出来,再加上更多细节。另请参见。对于Windows,您使用的是
VULKAN_SDK
变量,但对于Linux,使用的是
SHADERC_DIR
变量。Linux上变量
SHADERC\u DIR
的值是多少?库
libshaderc\u composed
的确切路径(和文件名)是什么?根据您的假设应该找到它?谢谢!因此,在使用github中的库时,我不应该使用环境变量,而应该将内容符号链接到/usr/lib和usr/include?@arrowd:问题中的代码既可以查看特定的目录(由特定于包的环境变量表示),也可以查看特定于系统的目录。这是在CMake中搜索内容的推荐和广泛使用的方法。在
/usr/lib
/usr/include
中添加符号链接绝对是个坏主意。