2017-09-14 13 views
0

J'essaie de mettre à jour notre système de construction pour qu'il soit non récursif. La configuration actuelle du système (dans lequel nous construisons deux fichiers GNU Octave et Matlab MEX) est:passage d'un système de compilation récursif à un système de compilation non récursif

---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/) 

Actuellement, commonmex.am contient la ligne EXEEXT=$(MEXEXT), ce qui permet mex fichiers compilé avec l'extension appropriée (.mex, .mexmaci, .mexmaci64, etc.) en fonction de la version Matlab et du système/architecture OS trouvés par configure. En tant que système récursif, cela fonctionne plutôt bien.

émission

Dans le passage à un système de construction non récursif (après avoir lu autotools-mythbuster et Karel Zak's blog), au lieu d'utiliser SUBDIRS, je includecommonmex.am et le mex*.am dans project/mex/build/matlab/Makefile.am. Le problème que je rencontre en faisant ce changement est que je ne suis pas en mesure d'écraser EXEEXT comme ci-dessus. Quand je lance autoreconf -si je reçois l'avertissement suivant:

./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 est un conditionnel dans Makefile.am qui enveloppe le Makefile ensemble telle qu'elle est ignorée si le bâtiment de la personne est l'un des GNU Octave ou Matlab, mais pas L'autre. Quand je lance make les fichiers mex sont construits mais sans extension du tout (je suis basé sur macOS, mais le résultat serait le même sur GNU/Linux j'imagine). Comme nous compilons ces fichiers mex pour les distribuer sur GNU/Linux, macOS, et Windows, l'extension est assez importante pour nous.

Comment puis-je passer à un système de construction non récursif en écrasant le EXEEXT défini en configure.ac avec la variable MEXEXT, également définie dans configure.ac?

Répondre

0

En fin de compte, c'était facile. Il suffit d'écraser la définition de EXEEXT dans configure.ac:

EXEEXT=$MEXEXT