Я учусь использовать 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
.