简体   繁体   中英

CMAKE Required header sys/stat.h not found

I am trying to configure the bcl2fastq program that uses CMake. I found the line that triggers this error message

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

error message:

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

On my system, the sys/stat.h is located in

/usr/include/x86_64-linux-gnu

In the past, I add a symbolic link in /usr/include to the sys/stat.h , which patched the problem. Can someone suggest a better method by modifying the CMake files?

Digging deeper, I found the macros.cmake file in the same directory as cxxConfigure.cmake contains the macro definition:

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

Then I did the following:

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

After that, CMake seems to be happy. Not sure this is the proper way to handle this problem.

Exporting the environment variable like

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

is one use.

Moreover, according to the doc on the find_path command, PATHS should be used over HINTS for hard-coded guesses, which means modifying macros.cmake like this

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

is more appropriate. For more flexibility, this could be combined with a PATHS ENV variable, too. The use of PATHS vs HINTS has also been asked in the CMake mailing list here , but the explanation didn't offer much more than the documentation entry.

I created a folder called sys in /usr/include.

Copied over the stat.h into that folder and ran the make command again. The bcl2fastq build completed without any issues.

在您的代码中写入<sys/stat.h>而不是<stat.h>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM