【问题标题】:How to get cmake to find size of type in third-party header mpi.h?如何让 cmake 在第三方头文件 mpi.h 中找到类型的大小?
【发布时间】:2017-03-30 16:35:52
【问题描述】:

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

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

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

当我使用时:

check_type_size("MPI_Offset" SIZEOF_MPI_OFFSET)

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

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

【问题讨论】:

    标签: cmake mpi


    【解决方案1】:

    这是通过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)
    

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

    就个人而言,虽然 CMake 肯定不是最令人愉快的练习,但对我来说 autotools 是为大罪而保留的。我很难为 CMake 辩护,但在这种情况下,它是even documented。自然,设置一个单独的“变量”,您甚至必须在事后重新设置,而不是仅仅将其作为参数传递,显然符合 CMake 令人惊讶的“设计原则”。

    【讨论】:

    • 谢谢!完美运行。
    • 关于您的情绪,有一个需要重置变量的解决方法:CMakePushCheckState。它绝不优雅,但总比没有好。
    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多