# CMakeAddFortranSubdirectory

Use MinGW gfortran from VS if a fortran compiler is not found.

The ‘add_fortran_subdirectory’ function adds a subdirectory to a project that contains a fortran only sub-project. The module will check the current compiler and see if it can support fortran. If no fortran compiler is found and the compiler is MSVC, then this module will find the MinGW gfortran. It will then use an external project to build with the MinGW tools. It will also create imported targets for the libraries created. This will only work if the fortran code is built into a dll, so BUILD_SHARED_LIBS is turned on in the project. In addition the CMAKE_GNUtoMS option is set to on, so that the MS .lib files are created. Usage is as follows:

    cmake_add_fortran_subdirectory(
     <subdir>                # name of subdirectory
     PROJECT <project_name>  # project name in subdir top CMakeLists.txt
     ARCHIVE_DIR <dir>       # dir where project places .lib files
     RUNTIME_DIR <dir>       # dir where project places .dll files
     LIBRARIES <lib>...      # names of library targets to import
     LINK_LIBRARIES          # link interface libraries for LIBRARIES
      [LINK_LIBS <lib> <dep>...]...
     CMAKE_COMMAND_LINE ...  # extra command line flags to pass to cmake
     NO_EXTERNAL_INSTALL     # skip installation of external project
     )

Relative paths in ARCHIVE_DIR and RUNTIME_DIR are interpreted with respect to the build directory corresponding to the source directory in which the function is invoked.

Limitations:

NO_EXTERNAL_INSTALL is required for forward compatibility with a future version that supports installation of the external project binaries during “make install”.