次の問題だけでなく、CMake で理解しなければならないことがたくさんありますが、これはまだ解決できない最初の最も単純な問題です。私はインターウェブを精査し、友人から「Mastering CMake」の本を借りさえしましたが、私はまだ最も苦労しています... CMake、Fortran、MinGW、さらには組み合わせに関して、オンラインで多くのものが存在します一度に2つ。しかし、この 3 つを合わせると、ほとんど存在しないように見えます。
(この時点で) 私がやりたいことは、MinGW の gfortran コンパイラを使用して、Windows で CMake を使用してビルドおよびコンパイルする単純な Fortran プログラムを取得することだけです。
...そして、私は CMake n00b です。
これは私がこれまで取り組んできたことです:
CMakeLists.txt:
project(cmake_test Fortran)
add_executable(testf test.f90)
test.f90:
program test
write(*,*)"hello world"
endprogram test
私は MinGW の MSYS2 バージョンを持っています。これは、私が最終的にコンパイルしようとしているコードが Windows でコンパイルされる唯一のバージョンだからです。(つまり、MSYS2 シェルで独自の Makefile を使用してコンパイルすると、コンパイルされます。)
Windows パスに が追加されてい;C:\msys64\mingw64\bin
ます。(私も試しましたが、他の問題の中でも特に、同じディレクトリにいる;C:\msys64\usr\bin
ことに不満があります。)sh.exe
次に、CMake-GUI をポップして開き、上記の CMakeLists をロードし、Configure をクリックして、プロジェクトのジェネレーターを「MinGW Makefiles」に指定し、「Use default native compilers」を選択して、次の出力を取得します。
The Fortran compiler identification is GNU 5.4.0
Check for working Fortran compiler: C:/msys64/mingw64/bin/gfortran.exe
Check for working Fortran compiler: C:/msys64/mingw64/bin/gfortran.exe -- works
Detecting Fortran compiler ABI info
Detecting Fortran compiler ABI info - done
Checking whether C:/msys64/mingw64/bin/gfortran.exe supports Fortran 90
Checking whether C:/msys64/mingw64/bin/gfortran.exe supports Fortran 90 -- yes
Configuring done
次に、[構成] をもう一度クリックすると、次のようになります。
Configuring done
次に生成します。
Generating done
私のビルド ディレクトリには、Makefile とその他の多くのファイルとディレクトリがあります。
MSYS2 シェルで make を実行しようとすると、次のようになります。
myself@COMPUTER MSYS /c/users/myself/desktop/dll_test/with_fortran_cmake/build
$ make
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\users\myself\desktop\dll_test\with_fortran_cmake\build>
最後の行はプロンプトです。もう一度実行するようmake
に入力すると、プロンプト内でプロンプトが再び表示されます。Ctrl+C を押すと、それが強制終了され、通常の MSYS2 プロンプトに戻ります。
したがって、CMakeの部分を正しく行っていると仮定しても、実際にそれを作成する方法を理解できません。
質問: リストした制約を考慮して、このサンプル コードをビルド/コンパイル/実行するにはどうすればよいですか?
(私が実際にやりたいのは、この部分を過ぎたら、Visual Studio 13 で動作するようにすることです。これは、CMake で構築されている C++ プロジェクトがあるためです (ほとんどの場合、質問へのアクセスが制限されている他の誰かによって書かれています)。 Visual Studio から C++ で呼び出すことができる何らかのライブラリに Fortran を入れると、Fortran はビルド済みのライブラリとしてそのままにしておくことができます。 VS から Fortran を編集する可能性があまりないことは知っていますし、それを行うことに興味もありません。)
生成されたコンテンツの内容は次のとおりですMakefile
(ここにコピーしたときにエディターがタブをスペースに置き換えたことに注意してください)。
# CMAKE generated file: DO NOT EDIT!
# Generated by "MinGW Makefiles" Generator, CMake Version 3.5
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Remove some rules from gmake that .SUFFIXES does not remove.
SUFFIXES =
.SUFFIXES: .hpux_make_needs_suffix_list
# Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
SHELL = cmd.exe
# The CMake executable.
CMAKE_COMMAND = "C:\Program Files (x86)\CMake\bin\cmake.exe"
# The command to remove a file.
RM = "C:\Program Files (x86)\CMake\bin\cmake.exe" -E remove -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = C:\Users\myself\Desktop\dll_test\with_fortran_cmake
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = C:\Users\myself\Desktop\dll_test\with_fortran_cmake\build
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
"C:\Program Files (x86)\CMake\bin\cmake-gui.exe" -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
"C:\Program Files (x86)\CMake\bin\cmake.exe" -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# The main all target
all: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start C:\Users\myself\Desktop\dll_test\with_fortran_cmake\build\CMakeFiles C:\Users\myself\Desktop\dll_test\with_fortran_cmake\build\CMakeFiles\progress.marks
$(MAKE) -f CMakeFiles\Makefile2 all
$(CMAKE_COMMAND) -E cmake_progress_start C:\Users\myself\Desktop\dll_test\with_fortran_cmake\build\CMakeFiles 0
.PHONY : all
# The main clean target
clean:
$(MAKE) -f CMakeFiles\Makefile2 clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
$(MAKE) -f CMakeFiles\Makefile2 preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
$(MAKE) -f CMakeFiles\Makefile2 preinstall
.PHONY : preinstall/fast
# clear depends
depend:
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 1
.PHONY : depend
#=============================================================================
# Target rules for targets named testf
# Build rule for target.
testf: cmake_check_build_system
$(MAKE) -f CMakeFiles\Makefile2 testf
.PHONY : testf
# fast build rule for target.
testf/fast:
$(MAKE) -f CMakeFiles\testf.dir\build.make CMakeFiles/testf.dir/build
.PHONY : testf/fast
test.obj: test.f90.obj
.PHONY : test.obj
# target to build an object file
test.f90.obj:
$(MAKE) -f CMakeFiles\testf.dir\build.make CMakeFiles/testf.dir/test.f90.obj
.PHONY : test.f90.obj
test.i: test.f90.i
.PHONY : test.i
# target to preprocess a source file
test.f90.i:
$(MAKE) -f CMakeFiles\testf.dir\build.make CMakeFiles/testf.dir/test.f90.i
.PHONY : test.f90.i
test.s: test.f90.s
.PHONY : test.s
# target to generate assembly for a file
test.f90.s:
$(MAKE) -f CMakeFiles\testf.dir\build.make CMakeFiles/testf.dir/test.f90.s
.PHONY : test.f90.s
# Help Target
help:
@echo The following are some of the valid targets for this Makefile:
@echo ... all (the default if no target is provided)
@echo ... clean
@echo ... depend
@echo ... testf
@echo ... edit_cache
@echo ... rebuild_cache
@echo ... test.obj
@echo ... test.i
@echo ... test.s
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
.PHONY : cmake_check_build_system
バージョン情報:
- GNU Fortran (GCC) 5.3.0
- Windows 7 エンタープライズ
- Cmake 3.5.2
- MSYS2 - このバージョンの確認方法がわかりません
- MinGW - このバージョンの見つけ方がわからない
私は検索中にオンラインでさまざまなページを調べてきましたが、それらすべてを追跡することを気にしませんでしたが、特にこれは、タイトルから非常に関連しているように思われるため、常に出くわすものです.実際の問題と解決策はまったく異なります。