未找到 CMAKE 所需的标头 sys/stat.h

Kem*_*hou 5 c++ cmake

我正在尝试配置使用 CMake 的 bcl2fastq 程序。我找到了触发此错误消息的行

file:bcl2fastq/src/cmake/cxxConfigure.cmake
############## content ####################
..... # ignoring many lines
bcl2fastq_find_header_or_die(HAVE_SYS_STAT_H  sys/stat.h)
......# more lines following
Run Code Online (Sandbox Code Playgroud)

错误信息:

-- time.h found as /usr/include/time.h
-- unistd.h found as /usr/include/unistd.h
CMake Error at cmake/macros.cmake:80 (message):
  Required header sys/stat.h not found.
Call Stack (most recent call first):
  cmake/cxxConfigure.cmake:41 (bcl2fastq_find_header_or_die)
  cxx/CMakeLists.txt:34 (include)
Run Code Online (Sandbox Code Playgroud)

在我的系统上,sys/stat.h位于

/usr/include/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)

在过去,我添加的符号链接/usr/includesys/stat.h,其修补的问题。有人可以通过修改 CMake 文件来建议更好的方法吗?

深入挖掘,我macros.cmakecxxConfigure.cmake包含宏定义的同一目录中找到了该文件:

#   
# Macro to find libraries, with support for static-only search
#
macro(bcl2fastq_find_header_or_die variable file)
find_file(${variable} ${file} HINTS ENV C_INCLUDE_PATH ENV CPATH ENV CPLUS_INCLUDE_PATH)
if    (${variable})
    message(STATUS "${file} found as ${${variable}}")
else  (${variable})
    message(FATAL_ERROR "Required header ${file} not found.")
endif (${variable})
endmacro(bcl2fastq_find_header_or_die)
Run Code Online (Sandbox Code Playgroud)

然后我做了以下事情:

export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)

之后,CMake 似乎很高兴。不确定这是处理此问题的正确方法。

com*_*por 4

导出环境变量,例如

export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)

是一种用途。

此外,根据命令上的文档find_pathPATHS应该用于HINTS硬编码的猜测,这意味着macros.cmake像这样修改

find_file([...] PATHS /usr/include/x86_64-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

更合适。为了获得更大的灵活性,它也可以与变量结合使用PATHS ENV此处的CMake 邮件列表中也询问了PATHSvs的使用,但解释并没有提供比文档条目更多的信息。HINTS