ビルドシステムを非再帰的に更新しようとしています。 (私たちは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-mythbusterとKarel Zak's blogを読んだ)非再帰的ビルドシステムへの移行において
号、代わりSUBDIRS
を使用する、I include
commonmex.am
とproject/mex/build/matlab/Makefile.am
でmex*.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上で配布するためにコンパイルするとき、その拡張子は私たちにとって非常に重要です。
EXEEXT
をconfigure.ac
に設定して、MEXEXT
という変数をconfigure.acに設定して上書きして、非再帰ビルドシステムに移行するにはどうすればよいですか?