Debian上Fortran的版本控制实践
一 语义化版本与Git分支策略
git tag -a v1.2.3 -m "Release 1.2.3"git push origin v1.2.3git log --oneline v1.2.2..v1.2.3二 编译器与依赖的版本固定
sudo apt updatesudo apt install gfortran 或 sudo apt install --only-upgrade gfortransudo apt install gfortran-<版本号>(如:gfortran-12)gfortran --versionupdate-alternatives 管理默认 gfortran:sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-12 100
sudo update-alternatives --config gfortran # 交互选择
FC=gfortran-12libblas-dev、liblapack-devlibopenmpi-dev(并行构建时使用 mpif90)libfftw3-dev、hdf5-dev三 构建与测试的矩阵化验证
# Makefile
FC = gfortran
FFLAGS = -O2 -Wall -Wextra
OBJS = utils.o main.o
app: $(OBJS)
$(FC) $(FFLAGS) -o $@ $^
%.o: %.f90
$(FC) $(FFLAGS) -c $< -o $@
clean:
rm -f *.o app
.PHONY: clean
构建与运行:make
./app
# fpm.toml
name = "mylib"
version = "0.1.0"
license = "MIT"
author = "Your Name"
[build]
auto-executables = false
[library]
source-dir = "src"
[test]
source-dir = "test"
构建与运行:fpm build
fpm test
fpm run
四 持续集成中的版本控制与矩阵构建
pipeline {
agent any
tools { tool 'Default' }
stages {
stage('Build and Test') {
matrix {
axes {
axis { name 'GFORTRAN'; values '10', '11', '12' }
axis { name 'MPI'; values 'no', 'yes' }
}
stages {
stage('Install deps') {
steps { sh 'sudo apt-get update && sudo apt-get install -y gfortran-$GFORTRAN libblas-dev liblapack-dev' }
when { expression { env.MPI == 'yes' } }
steps { sh 'sudo apt-get install -y libopenmpi-dev' }
}
stage('Build') {
steps {
sh '''
if [ "$MPI" = "yes" ]; then
FC=mpif90 FFLAGS="-O2 -fopenmp" make -f Makefile.mpi
else
FC=gfortran FFLAGS="-O2" make
fi
'''
}
}
stage('Test') {
steps { sh './run_tests.sh' }
}
}
}
}
}
post {
always { echo 'CI finished.' }
failure { echo 'Build or tests failed.' }
}
}
image: fortran:latest # 或 debian:stable-slim
before_script:
- apt-get update -qq && apt-get install -y -qq gfortran libblas-dev liblapack-dev make
build:
script:
- make
artifacts:
paths:
- app
expire_in: 1 week
test:
script:
- ./run_tests.sh