#makefile #gnu-make
#makefile #gnu-make
Вопрос:
Я пишу makefile, который загрузит и соберет все программы, которые мне нужны, в кластере HPC. Прежде чем делать что-либо еще, я хочу, чтобы это запустило это:
module add openmpi/1.8.4-gcc
module add slurm
Эти 2 команды изменяют некоторые переменные среды, такие как MPICC
и PATH
, чтобы я мог компилировать mpi-программы и планировать их запуск. Прямо сейчас они у меня в руках .bashrc
. Как мне переместить их оттуда в мой makefile?
Ответ №1:
Если вы запустите их перед запуском make
, это сработает. Если вы хотите, чтобы эти строки отображались в Makefile
, вы можете использовать .ONESHELL:
В противном случае make
будет генерироваться по одному процессу оболочки на строку, что сделает module load
строки бесполезными.
$ cat Makefile
CC=g
SHELL=/bin/bash
.ONESHELL:
all:
module load R
R --version
Пока модуль не загружен
$ R
-bash: R: command not found
запуск make
будет успешным:
$ make
module load R
R --version
R version 3.2.1 (2015-06-18) -- "World-Famous Astronaut"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)
[...]
Но для этого потребуется, чтобы каждое правило включало module load
команды.