如何让cmake在第三方标题mpi.h中查找类型的大小?

时间:2017-03-30 16:35:53

标签: cmake mpi

我正在开发一个涉及高性能计算和MPI库的免费软件项目。

在我的代码中,我需要知道MPI_Offset类型的大小,该类型在mpi.h中定义。

通常使用自动工具构建此类项目,这个问题很容易解决。但是对于我的罪过,我正在使用CMake构建,我找不到任何方法来执行这个简单的任务。但必须有办法 - 通常在autotools项目上完成,所以我认为它也可以在CMake中使用。

当我使用时:

check_type_size("MPI_Offset" SIZEOF_MPI_OFFSET)

失败,因为mpi.h不包含在生成的C代码中。

有没有办法告诉check_type_size()包含mpi.h?

1 个答案:

答案 0 :(得分:2)

这是通过CMAKE_EXTRA_INCLUDE_FILES

完成的
INCLUDE (CheckTypeSize) 

find_package(MPI)
include_directories(SYSTEM ${MPI_INCLUDE_PATH})

SET(CMAKE_EXTRA_INCLUDE_FILES "mpi.h")
check_type_size("MPI_Offset" SIZEOF_MPI_OFFSET)
SET(CMAKE_EXTRA_INCLUDE_FILES)

使用autotools编写平台检查可能更常见,因此这里有关于how to write platform checks with CMake的更多信息。

就个人而言,虽然CMake肯定不是最愉快的练习,但对我而言,autotools是为首都罪行保留的。我很难捍卫CMake,但在这种情况下,它是even documented。当然,设置一个单独的变量"您甚至不得不在事后重置,而不是仅仅将其作为参数传递,显然符合令人惊讶的设计原则" of CMake。