找不到CMAKE必需的头sys / stat.h

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找不到CMAKE必需的头sys / stat.h相关的知识,希望对你有一定的参考价值。

我正在尝试配置使用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

错误信息:

-- 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)

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

/usr/include/x86_64-linux-gnu

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

深入挖掘,我发现macros.cmake文件与cxxConfigure.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)

然后我做了以下事情:

export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu

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

答案

导出环境变量就像

export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu

是一种用途。

此外,根据doc命令中的find_pathPATHS应该用于HINTS进行硬编码猜测,这意味着修改macros.cmake就像这样

find_file([...] PATHS /usr/include/x86_64-linux-gnu)

更合适。为了获得更大的灵活性,这也可以与PATHS ENV变量结合使用。在CMake邮件列表PATHS中也提到了HINTShere的使用,但解释并没有提供比文档条目更多的内容。

另一答案

我在/ usr / include中创建了一个名为sys的文件夹。

将stat.h复制到该文件夹​​并再次运行make命令。 bcl2fastq构建完成没有任何问题。

以上是关于找不到CMAKE必需的头sys / stat.h的主要内容,如果未能解决你的问题,请参考以下文章

<sys/stat.h> 是啥意思?

CMake GoogleTests 在我的测试文件中找不到导入的头文件

struct stat

常用的头文件—— common.h

Stat(),Lstat(),Fstat() 获取文件/目录的相关信息

用C++编程一个串口,用Dev C++编译软件出现No such file or directory一个头文件找不到咋解决。