2015-08-26 33 views
3

我有一个makefile,我试图在运行目标之前加载一些模块。下面是生成文件:尝试在生成文件中加载模块环境时出错

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 

如果我只是在终端中运行. /usr/share/Modules/init/bash,它并没有给我任何错误。

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

回答

4

运行make recipe的默认shell为/bin/sh而不是/bin/bash。您可以通过分配SHELL变量来覆盖该值。 (注意:在化妆4.0加.SHELLFLAGS。)

此外,配方中的每行自身的shell会话中运行,因此像module load opencv线将加载模块中的shell会话是那么立即退出使下一行module load python/2.7.5将不会加载它。

您需要可以写在一行中的所有命令,或者告诉做,他们是一个续行通过在每行(结束使用\并确保有合适的;/& /等之间终止外壳的线条(因为它会在运行时将它作为一条线运行)

CC=g++ 
SHELL:=/bin/bash 

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 
+0

非常感谢!现在它工作正常。 – user2308191