2016-06-23 21 views
1

Ich versuche einen Fortran-Code mit gnu-autotools zu kompilieren. Die openmp bestimmte Zeilen in configure.ac ist:

AC_PROG_FC([gfortran]) 
AC_OPENMP 
FCFLAGS="$OPENMP_FCFLAGS -fcheck=all" 

Wenn ich mit diesem zusammenstellen, ich bin nicht omp Zusammenhang Compiler-Optionen erhalten, wie sie in der AC_OPENMP Makro in autoconf manual beschrieben.

Wenn ich explizit -fopenmp an Stelle von $OPENMP_FFLAGS platziere, dann funktioniert es.

Irgendwelche Hilfe bitte?

+0

Wie wäre es mit '$ OPENMP_FCFLAGS'? –

+0

Keine Änderung ... es nimmt immer noch nicht auf OPENMP_FCFLAGS – BaRud

+0

Ich verstehe nicht wirklich Autotools, aber sollte die 'AC_OPENMP' Zeile nicht nach **' AC_PROG_FC ([gfortran]) '' sein? Da Letzterer höchstwahrscheinlich den Fortran-Compiler setzt, würde man erwarten, dass die OpenMP-Erkennung erst nach dem Setzen des Compilers ausgeführt werden muss, nicht vorher. –

Antwort

1

Normalerweise versucht Autoconf alles für C-Sprache zu testen und deshalb erhalten Sie nur $OPENMP_CFLAGS als Ergebnis für den AC_OPENMP Befehl. Autoconf bietet jedoch auch Mechanismen zum Ändern der Programmiersprache (und somit auch des Compilers) unter Verwendung des Befehls AC_LANG (bitte sehen Sie sich Autoconf/Language Choice webpage für weitere Details und auch einige Alternativen an). Der folgende Code wurde mit dem Befehl autoconf 2.69 und mit dem folgenden Befehl getestet: autoreconf -fiv (auch mit einer leeren Datei Makefile.am).

AC_INIT([omp-fortran-sample], [1.0]) 
AC_PROG_CC 
AC_PROG_FC([gfortran]) 

dnl Checks for OpenMP flag for C language, stores it in $OPENMP_CFLAGS 
AC_LANG(C) 
AC_OPENMP 

dnl Checks for OpenMP flag for Fortran language, stores it in $OPENMP_FCFLAGS 
AC_LANG(Fortran) 
AC_OPENMP 

AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 

Die resultierende Ausführung des configure zeigt zwei Tests für OpenMP wie hier zu sehen:

checking for gcc option to support OpenMP... -fopenmp 
checking for gfortran option to support OpenMP... -fopenmp 

Und Makefile enthält nun beide OPENMP_CFLAGS und OPENMP_FCFLAGS Definitionen, unter anderem wie folgt:

... 
MKDIR_P = /bin/mkdir -p 
OBJEXT = o 
OPENMP_CFLAGS = -fopenmp 
OPENMP_FCFLAGS = -fopenmp 
PACKAGE = omp-fortran-sample 
...