我有一个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中加载模块?有什么建议吗?
答案 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会在运行它时将其作为一行运行)。
&