MinGW32 gfortran с помощью cmake жалуется на «Неизвестное расширение .f» - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь внедрить cmake для проекта MinGW32 gfortran, установленного в Windows 10. В настоящее время я должен использовать 32-битный MinGW для программного обеспечения. Я запускал mingw-get update и mingw-get upgrade, в результате чего gcc и gfortran были версии 6.3.0. Я установил cmake 3.14.1 из дистрибутива zip-файла Windows 10 и добавил его в PATH для среды MinGW cmd. Когда я запускаю cmake для своих файлов, он не проходит тесты компилятора и жалуется на следующее (полный вывод приведен ниже):

Unknown extension ".f" for file

В этом случае тестовая программа генерируется cmake-3.14/Modules/CMakeTestFortranCompiler.cmake. Тестирование компилятора с помощью этой маленькой программы должно легко выполняться cmake и программой MinGW make с правилами по умолчанию. Почему нет?

Я запускаю следующее из окна cmd и командного файла с именем 1-run-cmake.bat, который имеет следующее. Опция -DCMAKE_SH была добавлена, потому что cmake жаловался на то, что sh.exe находится в пути (предоставлен MinGW). Генератор "MinGW Makefiles" cmake используется, поскольку это 32-битная среда MinGW. cmake запускается из папки build.

set cmakeFlags=-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=gcc -DCMAKE_Fortran_COMPILER=gfortran -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_SH="CMAKE_SH-NOTFOUND" -G "MinGW Makefiles"
cmake %cmakeFlags% ..

Вывод с ошибкой:

1-run-cmake.bat
-- The C compiler identification is GNU 6.3.0
-- The Fortran compiler identification is GNU 6.3.0
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_FORTRAN_COMPILER_ENV_VAR
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working Fortran compiler: C:/MinGW/bin/gfortran.exe
CMake Error at C:/Users/sam/cdss-dev/StateMod/git-repos/cdss-app-statemod-fortran-utest/build-util/cmake-3.14.1-win64-x64/share/cmake-3.14/Modules/CMakeTestFortranCompiler.cmake:30 (try_compile):
  Unknown extension ".f" for file

    C:/Users/sam/cdss-dev/StateMod/git-repos/cdss-app-statemod-fortran-utest/test/build/CMakeFiles/CMakeTmp/testFortranCompiler.f

  try_compile() works only for enabled languages.  Currently these are:

    C FORTRAN RC

  See project() command to enable other languages.
Call Stack (most recent call first):
  CMakeLists.txt:30 (project)


-- Check for working Fortran compiler: C:/MinGW/bin/gfortran.exe  -- broken
CMake Error at C:/Users/sam/cdss-dev/StateMod/git-repos/cdss-app-statemod-fortran-utest/build-util/cmake-3.14.1-win64-x64/share/cmake-3.14/Modules/CMakeTestFortranCompiler.cmake:45 (message):
  The Fortran compiler

    "C:/MinGW/bin/gfortran.exe"

  is not able to compile a simple test program.

  It fails with the following output:





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:30 (project)


-- Configuring incomplete, errors occurred!
See also "C:/Users/sam/cdss-dev/StateMod/git-repos/cdss-app-statemod-fortran-utest/test/build/CMakeFiles/CMakeOutput.log".
See also "C:/Users/sam/cdss-dev/StateMod/git-repos/cdss-app-statemod-fortran-utest/test/build/CMakeFiles/CMakeError.log".

Файл CMakeLists.txt верхнего уровня:

# Configuration information for cmake program
# - used when the 1-run-cmake.bat script is run

cmake_minimum_required(VERSION 3.0)

#--
# The following is apparently not recognized (must be uppercase) even though some docs show this
#SET (CMAKE_Fortran_COMPILER gfortran)
#--
# The following complain about gfortran not being found in the PATH, even though it is
#SET (CMAKE_FORTRAN_COMPILER gfortran)
#SET (CMAKE_FORTRAN_COMPILER gfortran.exe)
#--
# The following does not work - must be all UPPERCASE
#SET (CMAKE_Fortran_COMPILER "C:/MinGW/bin/gfortran.exe")
# --
# The following results in error:  Unknown extension ".f" for file
#SET (CMAKE_FORTRAN_COMPILER_WORKS 1)
#--
# The following (mixed case) results in errors:
# Unknown extension ".F" for file
# Unknown extension ".f90" for file
#SET (CMAKE_Fortran_COMPILER_WORKS 1)
# --
# The following complains about not being able to compile a simple test program
# Not setting the compiler results in a cmake warning asking it to be set.
# Unknown extension ".f" for file
SET (CMAKE_FORTRAN_COMPILER "C:/MinGW/bin/gfortran.exe")

project(
    statemod_unit
    LANGUAGES C FORTRAN
)
enable_testing()

add_subdirectory(year)

Я даже не дошел до момента компиляции моих собственных исходных файлов (в настоящее время это тривиальный пример), потому что тест компилятора не пройден. Соглашения cmake для совпадающего (или не совпадающего) случая легко перепутать. Почему я не могу установить "gfortran" для компилятора, даже если PATH в окне cmd содержит его (where gfortran показывает C:\MinGW\bin\gfortran.exe).

Является ли ошибка, связанная с CMAKE_FORTRAN_COMPILER_ENV_VAR, чем-то, что мне нужно решить при использовании параметра, или это является признаком проблемы с корнем?

Я застрял и не смог найти путь вперед.

...