Тестирование проекта MPI (компиляция с использованием Cmake) с Travis CI - PullRequest
1 голос
/ 09 марта 2020

Я учусь использовать Travis CI для непрерывной интеграции. Мой проект должен использовать библиотеку MPI, поэтому я позволил Трэвису установить OpenMPI и использовать cmake для компиляции кода. Вот мой .travis.yml файл


## configure Travis to use the right compiler
dist: trusty
sudo: false # do not need sudo support
language: cpp

# Cacnhing dependencies
cache:
 directories:
  - openmpi-4.0.2   # build mpi only need to done onece


# MPI project
before_install:
 - sh ./get_openmpi.sh 

# save listing branches (specifies the branch to build) 
branches:
 only:
 - master
 - load_balancing 


script:
 - mkdir build
 - mkdir outputs
 - mkdir tests
 - cd build
 - cmake ..     # configuring cmake in the current build folder

А вот мой get_openmpi.sh файл сценария для ввода OpenMPI. Я устанавливаю его в каталог openmpi-4.0.2.

#!/bin/sh

# check if OpenMPI is cached from previous build
if [ -f "openmpi/bin/mpirun"]; then
 echo "Using cached OpenMPI"
else
 echo "Downloading OpenMPI source"
 wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.2.tar.gz
 tar xfz openmpi-4.0.2.tar.gz
 rm openmpi-4.0.2.tar.gz
 echo "Configuring and building openmpi"
 cd openmpi-4.0.2
 ./configure --prefix=`pwd`
 make -j 4 all
 make install
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/lib
 cd ..
fi

И мой CMakeLists.txt:

cmake_minimum_required(VERSION 3.9)

# name of the project + language
project(2d_wave CXX)

# Bring the headers
include_directories(inc)

# source file
file(GLOB SOURCES "src/*.cpp")

# executable file
add_executable(main ${SOURCES})



# MPI-------------------------------------------------------------------------------------

# find MPI package
find_package(MPI REQUIRED)
if(MPI_NOFOUND)
    message(ERROR "MPI is not found. Please check FindMPI.")
endif(MPI_NOFOUND)
#---------------------------------------------------------------------------------------

# libraires links
target_link_libraries(main PUBLIC MPI::MPI_CXX )

Однако cmake не может найти библиотеку MPI с помощью find_package(). Я экспортировал путь библиотеки в моем файле сценария (нужно ли это делать?), Но это не помогло.

Может кто-нибудь сказать мне, как связать библиотеку MPI с cmake? Большое спасибо!

Вот информация об ошибке:

-- The CXX compiler identification is GNU 4.8.4
-- Check for working CXX compiler: /usr/bin/g++
-- Check for working CXX compiler: /usr/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/local/cmake-3.9.2/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find MPI_CXX (missing: MPI_CXX_LIBRARIES MPI_CXX_INCLUDE_PATH)
Call Stack (most recent call first):
  /usr/local/cmake-3.9.2/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:377 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/cmake-3.9.2/share/cmake-3.9/Modules/FindMPI.cmake:640 (find_package_handle_standard_args)
  CMakeLists.txt:23 (find_package)

Если вам нужна дополнительная информация, вы можете посмотреть мою страницу Travis здесь . Я хочу протестировать свой проект на Brach load_balancing.

...