TOBEDONE:

Make sure it can be used wihout .vscode to be useful:

ドキュメントでmakeでも使える
　ドキュメントでchnange_project_nameがprjsettings.jsonとvscode/lauinchrjsonを書き換える

README_MAC.txtを作る


配布前に/src/*.f90 *.f、memo.txtを消す

MacLLDB検証

?にどう対応するのかわからない。でもlaunch.jsonでgdbタイプのほかにlldbタイプが指定できる項目があるので、望みはゼロではない。
LLDBむりならば当初はF5、Shift＋F５で実行のみと言う感じの設定に仕立てるのが無難かもしれない。

★マニュアルを作る
導入方法（プロジェクトフォルダテンプレートのコピー、Modern Fortran Extensionの導入（disable frtlts?, disable fortran lint)、環境変数の設定make/gdb/nagfor）、使い方（テンプレートをコピーしてsrcフォルダにソースコードを入れる、実行時のExe名と実行時のカレントフォルダーについて明記（ルートフォルダで、build_debug/MyProgDebug.exeというかんじ）、task それぞれについて説明、makefile targetそれぞれについて説明。　簡単に使うにはmake clean makeでOK。ファイルを追加したり削除したような場合はmake depend makeもしくあmake cleanするとdependencies.mkが消えるのでmake clean make はmake clean make depend make と同義（たぶん）とかそういう情報までふくみ、ユーザがテンプレートとして活用できるようにする。プロジェクトフォルダ名を変えたらlaunch.jsonも変えないといけないことや実際の変え方についても明記。


---------------------------
環境準備：
★ VSCODEをインストールする

★ NAG Fortran Compilerをインストールする
   nagforへのパスを通す、 環境変数の設定で、Pathにnagfor.exeがあるディレクトリを追加する。
   例）C:\Program Files (x86)\NAG\FBuilder 7.1\nagfor\bin

★ makeとgdbを入れる
   これにはmingwを入れれば事足りる。今回mingwに含まれているmingw32-make.exeとgdb.exeを使う。
   以下のURLから https://www.mingw-w64.org/downloads/#mingw-builds Win64 buildとかいうやつをクリックすると　リンク先：https://winlibs.com/ へ飛ぶ。
   そこでUCRT runtime（MSVCRTは古いので非推奨）のWin64バージョンを手に入れる
　 インストーラーではないので、そのまま展開する。mingw64というフォルダを例えばC:\mingw64とする。
 　環境変数の設定で、Pathにmingw32-make.exeがある場所を追加する。
     例）C:\mingw64\bin
   補足: mingw32-makeと言う名前は（３２が含まれている名前だが、調査したところによると32で良い。６４ビット環境でもこれ）
   リンクをはって、mingw32-makeをmakeとして予備せるようにする
     mklink make.exe mingw32-make.exe　（管理者権限が必要）

★ VSCODEの拡張機能のModern Fotranを入れる
    Extension Seetingsとして.vscode/settings.jsonで以下を指定している。これをしないと右下に警告（エラー＿）みたいのが表示されるので。
    {
        "fortran.fortls.disabled": true
    }
	この機能はちゃんと警告解除できれば便利な機能が使えるのかもしれないが、disable状態でもキーワードハイライトと簡単な補完みたいのはできる。
	（今後詳細を調査すれば、enableにして何か有効活用できるのかもしれないが、今回はdisableにした）
	
★あとはFortranProjectTemplateを日本語や空白がパスに含まれないような場所にコピーして使う。コピー先でFortranPorjectTemplateと言う名前を適宜リネームする。
  この際の注意点としてこのフォルダ名も日本語や空白パスが含まれないほうが良い。含まれていると例えばデバッグ時に以下のようなエラーに遭遇したり、なにかと問題に遭遇しやすい。
  遭遇したエラー例として、あるコードをVSCODEでデバッグしようとすると、Unable to start debugging. Unexpected GDB output from command "-environment-...と出た。
  調べたところプロジェクトフォルダのパスに日本語（及びスペース）があってはだめという情報がネットで得られた。ほかの人もこの現象に遭遇しているらしい。
  例えばダメだったパスの例は以下：
  C:\Users\hchib\OneDrive\デスクトップ\FortranProjectTemplate003
  これを以下のフォルダに移動したら問題が解消した。
D:\Users\hchib\FortranProjectTemplate003

★あとはsrcフォルダに自分のソースコードを作成（あるいはコピー）すれば利用できる。
コンパイルの対象はsrc/*.f90 src/*.fとなっている。

★VSCODEでフォルダを開く、でFortranProjectTemplate003（もしくは改名した名前）を指定する

★ビルドはShift＋Ctrl＋Bで行える。もしくはTerminal|Run Task|Build Fortran Projectで行える。
★実行はTerminal｜Run Task|Run Fortran Projectで行える。
★クリーンはTerminal｜Run Task|Clean Fortran Projectで行える。
★SwitchToDebugModeは。。。で行え、現在のビルドモードをデバッグにする
★SwitchToReleaeModeは。。。で行え、現在のビルドモードをリリースににする
ビルドモードは…で、コンパイルオプションもそれぞれのモードに適したものが使われる。
ビルドモードは次回変更するまで有効である。
★Show Infoはプロジェクト名、現在のビルドモード、ビルドフォルダ、Exeファイル名、依存関係ファイル、ソースファイル一覧を表示する。
例）
Project Name: MyFProject
Build Mode: release
Build Directory: build_release
Exe File: build_release/MyFProjectRelease.exe
Dependencies File: build_release/dependencies.mk
Source Files: src/hello.f90 src/mymod.f90 src/sub.f
★プロジェクト名の変更はTerminal｜Run Task|Change Project Nameで行える。
プロジェクト名には空白や日本語を含めてはいけない。
プロジェクト名の変更により実際に裏で書き換えられるファイルは.vscode/launch.jsonの"program"の部分と、ProjectName.incファイルである。
★デバッグの開始はF5もしくはRun｜Start debugging
★デバッグの終了はShift＋F5もしくはRun｜Stop debugging
★デバッグ無しの実行はCtrl＋F5もしくはRun｜Start WithoutDebuggingで行える。
Note：デバッグ及びデバッグ無し実行はつねにビルドモードがデバッグで行われ build_debug/プロジェクト名Debug.exeがデバッグ対象EXEとなる。
 （Terminal｜Run Task｜Run Fortran Porjectで実行する場合は、この点が異なり、その時のビルドモードで作られた実行形式ファイルが実行対象となる）

Terminalでは以下のようにmakeコマンドで上記の操作の多くは行える。
make 
　依存関係ファイルがそんざいしなければ依存関係ファイルを生成してから make all する
make all
　必要に応じてコンパイル、リンクを行いexeを作成する
make run
  make all後に実行も行う
make depend
　依存関係ファイルを作る
make clean
　exeファイル、オブジェクトファイル、.modファイル、依存関係ファイルを削除してプロジェクトをクリーンな状態にする
make show_info
  以下の各種情報を表示する
Project Name、Build Mode、Build Directory、Exe File、Dependencies File、Source Files



以下技術情報メモ

★transform_dependencyというのがあるが、これはnagfor=dependで出てくる結果を修正するためである。
nagfor =depend -Ibuild_dir -mdir build_dirとかやってみたが、上手くいかなかったので最終手段として
このtransform_dependencyを作った。
このスクリプトは、ファイル名を見て.oと.modならば、それらがbuild_dir(build_releaseかbuild_debug）にあることが
分かっているのでそのように書き換えるというもの。
例えば
hello.oはbuild_debug/hello.oに書き換えられる。
src/hello.f90はそのまま書き換えられない。
マルコムさんとも相談して、このスクリプト無しでもnagfor =depend の出力が得られるような修正（？）をしてもらっても良いかもしれない（将来的に）
例えば-odirというので.oファイルがカレントフォルダでない場所に作られるような場合の依存関係も出力できるとこの問題は解決できそうな感じ。
nagfor =depend src/*.f90 -mdir build_debug -odir build_debug


===========================================================
scripts/*.pyファイルについて
===========================================================
本テンプレートでは以下のパイソンスクリプトを利用している
1. read_settings.py
   - 目的: prjsettings.json から指定されたパラメーターから値を読む
   - 引数:
     - パラメーター名（必須）
     - デフォルト値（オプショナル）
   - 使用箇所: Makefile で BUILD_MODE と PROJECT_NAME を読み込む際に使用。

2. write_settings.py
   - 目的: prjsettings.json に指定されたパラメーターに値を書き込む
   - 引数:
     - パラメーター名（必須）
     - 値（必須）
   - 使用箇所: tasks.json の「Switch to Debug Mode」と「Switch to Release Mode」タスクで使用。

3. change_project_name.py
   - 目的: 新しいプロジェクト名を prjsettings.json に設定し、.vscode/launch.json のprogramのパスを適切なexe名で更新する
   - 引数:
     - 新しいプロジェクト名（必須）
   - 使用箇所: tasks.json の「Change Project Name」タスクで使用。

4. transform_dependencies.py
   - 目的: nagfor=dependの出力をソースファイル以外のファイル（*.oや*.mod）がビルドディレクトリにあるという前提で変換する
   - 引数:
     - ビルドディレクトリ名（必須）
   - 使用箇所: Makefile の `depend` ターゲットで使用。


===========================================================
.prjsettings.jsonについて
===========================================================
プロジェクトの設定値（現状ビルドモードとプロジェクト名のみが存在）を格納するためのJSON形式のファイル
   - buildMode: プロジェクトのビルドモード（'debug' か 'release'）。デフォルトはdebug
   - projectName: プロジェクト名。デフォルトは'MyProject'
使用箇所：
   - Makefile: BUILD_MODE と PROJECT_NAME を read_settings.py を用いて、このファイルから読み込んでいる
   - tasks.json: ビルドモードを切り替えるタスク（'Switch to Debug Mode' および 'Switch to Release Mode'）で `write_settings.py` を用いて、buildModeを更新している
   - change_project_name.py: 指定されたプロジェクト名を projectName に設定している


===========================================================
Makefileについて
===========================================================
dep-all
make コマンドを引数なしで実行した場合のデフォルトターゲット。依存関係ファイル（ build_release/dependencies.mk もしくは build_debugdependencies.mk ）が存在しない場合に生成し、その後 all を実行

all
プロジェクトの主要なビルドターゲット。必要なすべてのソースファイルをコンパイルして実行可能ファイルを生成

run
プログラムの実行。allターゲットが先に実行されている必要あり

clean
ビルドプロセスで生成されたすべてのファイルを削除

show_info
プロジェクトの現在の設定（プロジェクト名、ビルドモードなど）を表示。設定は prjsettings.json から読み込まれる

set_debug_mode
ビルドモードを debug に切り替え。write_settings.py スクリプトを使用して prjsettings.json を更新

set_release_mode
ビルドモードを release に切り替え。write_settings.py スクリプトを使用して prjsettings.json を更新

depend
依存関係ファイルを生成。nagfor =depend を使用して依存関係を得て、transform_dependencies.py で nagfor からの情報にビルドディレクトリを考慮に入れた変換を適用している


