Makefile 不会卸载冲突模块
Makefile won't unload conficting module
我有一个 Makefile 我在 Linux 上通过 Eclipse 运行。它具有以下形式:
SHELL:=/bin/bash
all:
module unload conflicting/module/1.2.3
module load correct/module/1.2.3
ifort myStuff
当我告诉 Eclipse “全部构建”时,出现以下错误:
correct.module.123(23):ERROR:150: Module 'correct/module/1.2.3' conflicts with the currently loaded module(s) 'comflicting/module/1.2.3'
我知道模块冲突,所以我卸载了第一个...
问题是您的食谱的每一行都在单独的 shell 中运行。因此,从 make
的父 shell 继承了它的环境,你的
module unload conflicting/module/1.2.3
行从 运行 所在的 shell 正确地卸载了指定的模块,但这只影响 shell。 module load
命令也从父 shell 继承了它的环境,并且由于它不受配方中上一个命令的影响,它仍然包含冲突模块。
至少有两种可能的解决方案:
从 makefile 中删除环境模块操作。通常认为用户有责任为要执行的构建适当地设置 make
的环境。特别是,环境模块操作非常 system-specific -- 有些系统甚至没有 module
命令,模块名称和可用模块列表不一定一致 -- 我不认为属于生成文件。
但是,如果您坚持进行模块操作,那么请将您的多行配方转换为单行(逻辑)配方:
SHELL:=/bin/bash
all:
module unload conflicting/module/1.2.3; \
module load correct/module/1.2.3; \
ifort myStuff
end-of-line 反斜杠导致 make
将多个物理行连接成一个逻辑行,然后需要分号将该行分成多个单独的命令。
我有一个 Makefile 我在 Linux 上通过 Eclipse 运行。它具有以下形式:
SHELL:=/bin/bash
all:
module unload conflicting/module/1.2.3
module load correct/module/1.2.3
ifort myStuff
当我告诉 Eclipse “全部构建”时,出现以下错误:
correct.module.123(23):ERROR:150: Module 'correct/module/1.2.3' conflicts with the currently loaded module(s) 'comflicting/module/1.2.3'
我知道模块冲突,所以我卸载了第一个...
问题是您的食谱的每一行都在单独的 shell 中运行。因此,从 make
的父 shell 继承了它的环境,你的
module unload conflicting/module/1.2.3
行从 运行 所在的 shell 正确地卸载了指定的模块,但这只影响 shell。 module load
命令也从父 shell 继承了它的环境,并且由于它不受配方中上一个命令的影响,它仍然包含冲突模块。
至少有两种可能的解决方案:
从 makefile 中删除环境模块操作。通常认为用户有责任为要执行的构建适当地设置
make
的环境。特别是,环境模块操作非常 system-specific -- 有些系统甚至没有module
命令,模块名称和可用模块列表不一定一致 -- 我不认为属于生成文件。但是,如果您坚持进行模块操作,那么请将您的多行配方转换为单行(逻辑)配方:
SHELL:=/bin/bash all: module unload conflicting/module/1.2.3; \ module load correct/module/1.2.3; \ ifort myStuff
end-of-line 反斜杠导致
make
将多个物理行连接成一个逻辑行,然后需要分号将该行分成多个单独的命令。