尝试在makefile中加载模块环境时出错

时间:2015-08-26 03:13:58

标签: bash makefile

我有一个makefile,我正在尝试在运行目标之前加载一些模块。这是makefile:

ST

但是当我运行CC=g++ all: . /usr/share/Modules/init/bash module load gcc/4.8.1 module load opencv module load python/2.7.5 $(CC) -std=gnu++11 -lstdc++ -fPIC -shared -o ....... clean: rm ../../lib/linux/extract_features.so 命令时,它会给我这个错误:

make

如果我只是在终端中运行/usr/share/Modules/init/bash_completion: line 14: syntax error near unexpected token `(' /usr/share/Modules/init/bash_completion: line 14: ` comm -23 <(_module_avail|sort) <(tr : '\n' <<<${LOADEDMODULES}|sort)' /usr/share/Modules/init/bash_completion: line 14: warning: syntax errors in . or eval will cause future versions of the shell to abort as Posix requires make: *** [all] Error 1 ,它就不会给我任何错误。

如何在makefile中加载模块?有什么建议吗?

1 个答案:

答案 0 :(得分:4)

运行make recipes的默认shell为/bin/sh而不是/bin/bash。您可以通过分配SHELL变量来覆盖它。 (请注意在make 4.0中添加了.SHELLFLAGS。)

此外,配方的每一行都在其自己的shell会话中运行,因此像module load opencv这样的行将在shell会话中加载该模块,然后立即退出,以便下一行{ {1}}不会加载它。

您需要在一行上写下所有命令,或者在每行末尾使用module load python/2.7.5告诉他们它们是一个连续的行(并确保拥有正确的\ shell的行之间的/ ; / etc。终止符(因为make会在运行它时将其作为一行运行)。

&