2017-09-14 9 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 등)를 사용하여 Matlab 버전 및 OS 시스템/아키텍처에 따라 configure에 있습니다. 재귀 적 시스템으로서, 이것은 꽤 잘 작동합니다.

(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 옥타브 또는 matlab에 있지만 중 하나가있는 경우가 무시되도록 전체 Makefile을 래핑 Makefile.am의 조건입니다 다른 하나.

make을 실행하면 mex 파일이 만들어 지지만 확장자가 전혀없는 것입니다. (필자는 macOS를 사용하고 있지만 결과는 GNU/Linux에서 동일합니다). GNU/Linux, macOS, Windows에서 배포하기 위해 이러한 mex 파일을 컴파일 할 때 확장 기능은 우리에게 매우 중요합니다.

EXEEXTconfigure.ac으로 설정하고 MEXEXT 변수를 configure.ac에 설정하여 덮어 쓰면서 비 재귀 빌드 시스템으로 이동할 수 있습니까?

답변

0

결국 쉽습니다. EXEEXT의 정의를 덮어 쓰면 configure.ac :

EXEEXT=$MEXEXT