У меня есть проект C++
, который реализован в Linux с JetBrain CLion
IDE.Чтобы получить исполняемый файл, я использовал CMake
, который полностью совпадает с JetBrain CLion
.Проект использует MPI
для обработки многоузловой обработки, и проект отлично работает в Linux.
Теперь мне нужно также получить исполняемый файл для Windows.Итак, я установил версию сообщества Visual Studio 2019
вместе с Microsft MPI
, чтобы построить там свой проект.Я обнаружил, что проще создать файл sln
для проекта с помощью CMake
, а затем импортировать проект в VS
.Но, когда я попробовал этот подход, я получил ошибку за то, что не нашел MPI
:
Could NOT find MPI_C (missing: MPI_C_LIB_NAMES MPI_C_HEADER_DIR MPI_C_WORKS)
Could NOT find MPI_CXX (missing: MPI_CXX_LIB_NAMES MPI_CXX_HEADER_DIR MPI_CXX_WORKS)
CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find MPI (missing: MPI_C_FOUND MPI_CXX_FOUND)
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files/CMake/share/cmake-3.15/Modules/FindMPI.cmake:1687 (find_package_handle_standard_args)
CMakeLists.txt:35 (find_package)
Код cmake, который работает в Linux:
find_package(MPI REQUIRED)
include_directories(${MPI_INCLUDE_PATH})
add_executable(prjt main.cpp)
add_subdirectory(sub1)
add_subdirectory(sub2)
target_link_libraries(prjt ${MPI_LIBRARIES})
set_property(TARGET prjt PROPERTY CXX_STANDARD 11)
После прочтения [1] и [2] , я также пытался:
set(CMAKE_PREFIX_PATH "C:/Program Files/Microsoft MPI")
find_package(MPI REQUIRED)
include_directories(${MPI_INCLUDE_PATH})
set(CMAKE_C_FLAGS "${CMAKE_FLAGS} ${MPI_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MPI_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_EXE_LINKER_FLAGS}")
add_executable(prjt main.cpp)
add_subdirectory(sub1)
add_subdirectory(sub2)
target_link_libraries(prjt ${MPI_LIBRARIES})
set_property(TARGET prjt PROPERTY CXX_STANDARD 11)
, но все равно безуспешно.
Я также пытался связать MPI напрямую через MSVS, как указано в [3] , но это тоже не сработало.Проблема в этом подходе заключается в том, что когда я вызываю set MSMPI
, я получаю только MSMPI_BIN=C:\Program Files\Microsoft MPI\Bin\
, а остальные переменные среды не получаю.В Linker
из MSVS
я также вручную добавил адрес Microst SDK
.(Я также добавил другие обязательные переменные среды, как [4] объясняет)
Я ценю любую помощь или комментарий.