2017-09-14 22 views
0

ビルドシステムを非再帰的に更新しようとしています。 (私たちはGNUオクターブとMatlabの両方のMEXファイルをビルドする)システムの現在のレイアウトは次のとおりです。再帰的ビルドシステムから非再帰ビルドシステムへの変更

現在
---project/ 
| ---mex/ 
| | +--src/ (contains common source files) 
| | +--matlab-mex/ (contains compiled Matlab mex files) 
| | +--octave-mex/ (contains compiled Octave mex files) 
| | ---build/ 
| | | mex1.am 
| | | ... 
| | | mexN.am 
| | | ---matlab/ 
| | | | Makefile.am 
| | | | configure.ac 
| | | | commonmex.am 
| | | | ---mex1/ 
| | | | | Makefile.am 
| | | | ... 
| | | | ---mexN/ 
| | | | | Makefile.am 
| | | +--octave/ (... same layout as project/mex/build/matlab/) 

commonmex.amは、適切な拡張子(.mex.mexmaciしてコンパイルにmexファイルをできるように、ラインEXEEXT=$(MEXEXT)が含まれています.mexmaci64など)は、configureのMatlabバージョンとOSシステム/アーキテクチャによって異なります。再帰的システムとして、これはかなりうまくいく。

autotools-mythbusterKarel Zak's blogを読んだ)非再帰的ビルドシステムへの移行において

、代わりSUBDIRSを使用する、I includecommonmex.amproject/mex/build/matlab/Makefile.ammex*.am。この変更を行う際に遭遇する問題は、上記のように私がEXEEXTを上書きすることができないことです。私はautoreconf -siを実行すると、私は次のような警告が出ます:

./commonmex.am:1: warning: EXEEXT was already defined in condition TRUE, which includes condition DO_SOMETHING ... 
Makefile.am:10: 'mex1/mex1.am' included from here 
mex1/mex1.am:1: './commonmex.am' included from here 
configure.ac:59: ... 'EXEEXT' previously defined here 

NB:if DO_SOMETHING人の建物がGNU Octaveのか、Matlabのではなく、のいずれかを持っている場合、それは無視されるように、全体のMakefileを包むMakefile.amで条件付きですもう片方。

makeを実行すると、mexファイルがビルドされますが、拡張子はまったくありません(私はMacOS上にビルドしていますが、結果はGNU/Linuxでも同じです)。これらのmexファイルをGNU/Linux、macOS、およびWindows上で配布するためにコンパイルするとき、その拡張子は私たちにとって非常に重要です。

EXEEXTconfigure.acに設定して、MEXEXTという変数をconfigure.acに設定して上書きして、非再帰ビルドシステムに移行するにはどうすればよいですか?

答えて

0

最後は簡単でした。 EXEEXTの定義をconfigure.acに上書きする:

EXEEXT=$MEXEXT 
関連する問題