我正在尝试配置使用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似乎很开心。不确定这是解决此问题的正确方法。
答案 0 :(得分:1)
导出环境变量,如
export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
是一种用途。
此外,根据find_path
命令中的doc,PATHS
应该用在HINTS
上,以进行硬编码的猜测,这意味着修改macros.cmake
像这样
find_file([...] PATHS /usr/include/x86_64-linux-gnu)
更合适。为了获得更大的灵活性,它也可以与PATHS ENV
变量结合使用。在CMake邮件列表here中也要求使用PATHS
与HINTS
,但是解释只提供了文档条目。
答案 1 :(得分:0)
我在/ usr / include中创建了一个名为sys的文件夹。
将stat.h复制到该文件夹中,然后再次运行make命令。 bcl2fastq构建完成,没有任何问题。