2015-08-26 37 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