如何使用cmake编译包含c程序的MPI

我正在尝试将openmp和mpi技术应用于开源C程序,该程序需要构建“cmake。&& make”。 我已经找到了如何在CMake的try_compile函数中为OpenMP设置链接器标志如何包含-fopenmp标志但仍然混淆了mpi。 我该怎么办?

OpenMP的

这是关于OpenMP的问题吗? 然后你所要做的就是使用-fopenmp进行编译,你可以通过将它附加到CMAKE_C_FLAGSCMAKE_C_FLAGS ,例如:

 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp) 

MPI

对于MPI ,你必须先找到mpi

 find_package(MPI) #make it REQUIRED, if you want 

然后将它的头文件添加到您的搜索路径

 include_directories(SYSTEM ${MPI_INCLUDE_PATH}) 

最后链接你的程序(在我的情况下是my_mpi_target

  target_link_libraries(my_mpi_target ${MPI_C_LIBRARIES}) 

在基于目标的现代CMake 3.X中,CMakeLists.txt应如下所示:

 cmake_minimum_required(VERSION 3.0) project(main) find_package(MPI REQUIRED) # add this line only when you are using openmpi which has a different c++ bindings add_definitions(-DOMPI_SKIP_MPICXX) # Use imported targets would make things much eazier. Thanks Levi for pointing it out. add_executable(main main.cpp) target_link_libraries(main PRIVATE MPI_C) # Old way. #target_link_libraries(main # PRIVATE # ${MPI_C_LIBRARIES}) #target_include_directories(main # PRIVATE # ${MPI_C_INCLUDE_PATH})