빌드 시스템을 비회원으로 업데이트하려고합니다. 시스템의 현재 레이아웃 (있는 우리는 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
등)를 사용하여 Matlab 버전 및 OS 시스템/아키텍처에 따라 configure
에 있습니다. 재귀 적 시스템으로서, 이것은 꽤 잘 작동합니다.
(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 옥타브 또는 matlab에 있지만 중 하나가있는 경우가 무시되도록 전체 Makefile을 래핑 Makefile.am
의 조건입니다 다른 하나.
make
을 실행하면 mex
파일이 만들어 지지만 확장자가 전혀없는 것입니다. (필자는 macOS를 사용하고 있지만 결과는 GNU/Linux에서 동일합니다). GNU/Linux, macOS, Windows에서 배포하기 위해 이러한 mex 파일을 컴파일 할 때 확장 기능은 우리에게 매우 중요합니다.
EXEEXT
을 configure.ac
으로 설정하고 MEXEXT
변수를 configure.ac에 설정하여 덮어 쓰면서 비 재귀 빌드 시스템으로 이동할 수 있습니까?