eclipse - Makefile 不会卸载冲突模块
问题描述
我有一个在 Linux 上通过 Eclipse 运行的Makefile 。它具有以下形式:
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'
我知道模块冲突,这就是我卸载第一个模块的原因......
解决方案
问题是配方的每一行都在一个单独的外壳中运行。因此,从make
的父 shell 继承了它的环境,你的
module unload conflicting/module/1.2.3
line 从运行它的 shell 中正确卸载指定的模块,但这仅影响该 shell。该module load
命令还从父 shell 继承其环境,并且由于不受配方中先前命令的影响,因此它仍然包含冲突模块。
至少有两种可能的解决方案:
从 makefile 中取出环境模块操作。通常认为用户有责任为
make
要执行的构建适当地设置环境。特别是,环境模块操作是非常特定于系统的——有些系统甚至没有module
命令,模块名称和可用模块列表不一定一致——我认为这不属于 makefile。但是,如果您坚持进行模块操作,则将您的多行配方转换为单(逻辑)行配方:
SHELL:=/bin/bash all: module unload conflicting/module/1.2.3; \ module load correct/module/1.2.3; \ ifort myStuff
行尾反斜杠导致
make
将多个物理行连接成一个逻辑行,然后需要分号将该行分解为多个单独的命令。
推荐阅读
- export-to-csv - 将数据从 SQL 数据库导出到 CSV 文件,一些数据行被拆分为多行
- java - Error after changing name of Naturald parameter
- video-streaming - 如何在阿里巴巴VOD服务上上传单个视频
- mysql - 如何在 Laravel 中添加金额约束的总和?
- ffmpeg - 如何让ffmpeg自动填充帧?
- python-3.x - Python:语法错误 IF Else 语句
- java - 使用 poi 在 Excel 工作表中设置样式
- angular - 从 angular 5 迁移到 angular 6 - @angular/core 的变化
- javascript - 如何使用 A-Frame for VR 在每个实体上创建指标?
- sql - SQL 中的条件 SUM