今朝のブログに書いた通り、C#の勉強用とはいえ、コンパイラーのオプションをすべて手書きに任すのも忍びなく、先だっての出力先の問題を踏まえて、vbc.exeとの互換性も考え、以下のようにしました。
1.出力関連
(1)出力先は「/out:(出力ファイル)」というオプションがあり、焦って改造した奴はこれを使っていましたが、勉強用程度のものならソースファイルと同じフォールダーで何ら問題が無いこと、このオプションは文字列が長くなりすぎることから、コンパイル時にカレントディレクトリーをソースファイルのところに移動し、終了後元に戻る形にして「/out」オプションは採用しませんでした。
(2)ターゲットはコンソールアプリ、ウィンドウズアプリ(注1)は当然選択対象にし、DLLも一応入れておく必要があるということで、この三択(実際は未選択を入れて四択、以下同じ)だけにしました。実際に利用できるオプションはこれより多い(注2)ですが、そのような出力は手作業で入力するか、MSCompAssには手が余るようでしたらVisual Studioを使ってください。(以下同じ)
注1:後でテストとしてHello World!のコンソールプログラムをウィンドウズアプリでコンパイルするとちゃんとコンパイルされコンソールにも正しく表示されますが、色々とウィンドウズ用にくっついているらしく、ファイルサイズは100KB程増えました。
注2:その為にオプションをしているすダイアログには「主要オプション指定」というキャプションを振っています。
2.リソース
正直、C#でウィンドウズプログラムも作ったことが無く、rc.exeで*.resファイルは別建てでつくる必要があり、ここの設定には自信ありません。
Microsoft Docsなどで見ると*.resファイルのリソースもWin32のすべてではないようにも読めます。しかし、一応「/win32res」は入れておきました。(但し、テストでコンソールプログラムのコンパイルで、BCCSkeltonでつくったサンプルのresファイルを喰わせるとちゃんと食べました!リソース部分を単にくっつけるだけのようです。ファイルサイズが変化しました。)
「/win32icon」はプログラムアイコンの指定なんだろうと思っていますが、どうなんでしょう?のちに分かると思います。(笑)→後でテストしてみました。アイコンファイルを指定するとプログラムアイコンになります。
「/resource」は何を入れるのか正直分かりませんが、これも一応入れておきました。
なお、これらは「:(ファイルパス、名)」を追加する必要があるので、「ファイルを開く」ダイアログ(注)で指定できるようにしました。
注:ファイルフィルターは"リソースファイル(*.res)\0*.res\0アイコンファイル(*.ico)\0*.ico\0全てのファイル(*.*)\0*.*\0\0"にしています。
3.コード生成
/debugと/optimizeがありますので、単独、組合せの三択にしました。資料では「[+|-]」とあり、この後に+か-記号を付けるようですが、-はオプション無しと同義なので外しました。→後でテストしたら/debug+、/optimize+でちゃんとコンパイルされました。
4.警告
0-4の5段階の警告があるそうです。くどいですが一応選択肢に入れました。
出来上がりをサンプルプログラムでコンパイルして意図通りの動作をしていることを確認しました。
(余談ですが、/debug+をつけてコンパイルすると(ファイル名).pdbファイルが排出されますね。これでWinDbgも使えるようになるかも、です。)
ps. C# 6.0の表記を受け入れない話を今朝書きましたが、コンパイル時の出力を確かめたら、”Microsoft (R) Visual C# Compiler version 4.8.4084.0 for C# 5 Copyright (C) Microsoft Corporation. All rights reserved.”とありますね。新しい奴はロハじゃないのかな?
追記:そのあと、「最新のcsc.exeはロハで手に入るのかな?」とご本家のC#にかかわるcomprehensiveなサイトに行きました。その中の「C#の新機能」に最新版(C# 11)について説明があり、オープンソースの.NET(現在6から7に移行中?)をDLすればよいのだ、とのこと。しかし、訳も分からずに導入する恐怖があり、やはり当分は「C#の歴史に沿って昔のバージョンで遊んでみよう」と考え直しました。
