我正在开发一个 MPI 应用程序,它需要与 MPI 的特定实现一起运行(我们称之为 MPIvA)。在我的工作站上,安装了 MPI 的另一个实现(我们称之为 MPIvB)。
我的应用程序是使用 CMake 构建的find_library(MPI)
显然指向MPIvB。它可以毫无麻烦地编译和运行。
我在我的工作站上编译了 MPIvA。如何让 CMake 使用这些标头和二进制文件?
CMake 附带了一个 FindMPI 模块,可以为您完成所有繁重的工作。
在你的 CMakeLists.txt 中,而不是调用find_library(MPI)
, use find_package
像这样:
#### MPI
find_package(MPI REQUIRED)
if (MPI_FOUND)
include_directories(SYSTEM ${MPI_INCLUDE_PATH})
else (MPI_FOUND)
message(SEND_ERROR "This application cannot compile without MPI")
endif (MPI_FOUND)
然后,无论您在哪里链接您的应用程序,都链接到${MPI_LIBRARIES}
:
target_link_libraries(example-app ${MPI_LIBRARIES})
现在cmake会自动查找a您系统中的 MPI 实现。如果您有多个不同的 MPI 版本,并且想要指定使用哪一个进行编译,您可以设置MPI_C_COMPILER
and MPI_CXX_COMPILER
变量对应的mpicc
and mpicxx
编译器包装器。然后,CMake 模块将使用这些来找出所有必需的编译器和链接器标志本身。
Example:
cmake -DMPI_C_COMPILER=/usr/share/mvapich/bin/mpicc your-project-dir
为了确保 cmake 使用正确的 MPI,请从新的空构建目录开始。
有关 FindMPI 模块的更多信息,请参见此处:https://cmake.org/cmake/help/v3.0/module/FindMPI.html https://cmake.org/cmake/help/v3.0/module/FindMPI.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)