浏览代码

Pass -o after -c for Fortran to avoid mpif77 ordering bug

When running

  $ mpif77 -c example.f -o example.f.o

mpif77 recognizes -o and produces example.f.o, but when running

  $ mpif77 -o example.f.o -c example.f

the -o option is ignored and the object file is example.o.  Performing
the same experiment on the underlying compiler tool or with the mpicc
and mpiCC wrappers does not exhibit this behavior, so the issue appears
to be specific to mpif77.

Reported-by: Zhen Wang <[email protected]>
Brad King 15 年之前
父节点
当前提交
93f230e408
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      Modules/CMakeFortranInformation.cmake

+ 2 - 1
Modules/CMakeFortranInformation.cmake

@@ -168,9 +168,10 @@ SET(CMAKE_Fortran_ARCHIVE_APPEND "<CMAKE_AR> r  <TARGET> <LINK_FLAGS> <OBJECTS>"
 SET(CMAKE_Fortran_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
 SET(CMAKE_Fortran_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
 
 
 # compile a Fortran file into an object file
 # compile a Fortran file into an object file
+# (put -o after -c to workaround bug in at least one mpif77 wrapper)
 IF(NOT CMAKE_Fortran_COMPILE_OBJECT)
 IF(NOT CMAKE_Fortran_COMPILE_OBJECT)
   SET(CMAKE_Fortran_COMPILE_OBJECT
   SET(CMAKE_Fortran_COMPILE_OBJECT
-    "<CMAKE_Fortran_COMPILER> -o <OBJECT> <DEFINES> <FLAGS> -c <SOURCE>")
+    "<CMAKE_Fortran_COMPILER> <DEFINES> <FLAGS> -c <SOURCE> -o <OBJECT>")
 ENDIF(NOT CMAKE_Fortran_COMPILE_OBJECT)
 ENDIF(NOT CMAKE_Fortran_COMPILE_OBJECT)
 
 
 # link a fortran program
 # link a fortran program