レガシー資産マニアのブログ

愛知県三河から、石川→新潟へととびまくってきたSEのブログ。長岡市を拠点に、もそもそ動いているプログラマー。 長岡の自称ジャニーズが合い言葉。そんな山P。 初めてPCを触ったのは小2にも関わらず、言語知識に乏しいので、 .NETの勉強会を通して、.NETの知識向上と、人脈を広げたい。 座右の銘は「死ぬ気でやってみろ。死なないから」

msbuildでビルドをして苦労した話(C++Builder)

この記事は、Delphi Adventcalendarの9日目の記事です。
qiita.com

どうも、やまぴです!
新潟でMS系OSで使う業務ソフトを作っています。
絶賛、ファン募集中ですw
twitter.com

苦労とは

ビルドの苦労は様々です。
人にとって、簡単なところで躓くこともありますし、
情報が見つからなくて苦労することもあるでしょう。

ここでは、会社で開発環境をリプレースして、C++Builder5からC++BuilderXE7に変わったことで
苦労した点をあげつらいたいと思います。

プロジェクトがわからない

そうです。そうなんです。プロジェクト構成、がっつり変わるんです。

  • ver5

当時は。*.bpr,*.bpg, *.bpkというファイルでした。
当時からXML形式のプロジェクトファイル構成ではあったものの、いくつかのファイルは外部ファイル(いわゆる*.res)に含まれていました。

  • XE7

今は、*.cbprojというファイルになりました。
中身も記述構成がガラリとかわりました。

.resファイルにあったアイコン、バージョン情報がプロジェクトファイルに移行していた。

最近知ったのですが、リソースファイルからいくつかの情報が移動した?のでしょうか。
調べてみる限り、いくつかではなく、すべて移動した、といっても過言ではない様子。
特殊なリソース情報だけ、外部ファイルに外出ししている、そのようなプロジェクト構成になったとか。

プロジェクトのビルドで困ったこと

ビルド方法は2つあります。
1つは、開発環境を起動して、そのまま「ビルド」をすること。
もう一つは、MSBuildを使う方法
前者は今までと感覚は変わりません。
後者について、詳しくは、こちらをご参照ください。
84taka-y.hateblo.jp

MSBuildをするときに注意をすること

まず、コマンドプロンプトで動くのですが、どうやって動かすか。

普通にコマンドプロンプトを立ち上げないでください。
C++Builderのフォルダーにあるコマンドプロンプトを立ち上げましょう。
スタートメニューを起動して、「Embarcadero Rad Studio XXXXX」→「Rad Studio コマンドプロンプト」を立ち上げてください。
何が違うか?それは、プロパティを見てみると分かるのですが、Builder用のバッチファイルを読み込ませてパスを通しているだけです。

当時は一般的なコマンドプロンプトや、VS系を入れることででてくる「開発者コマンドプロンプト」との違いが判らず、???マークだらけでした。(VSのコマンドプロンプトも、ショートカットのプロパティを見ると、やはり独自にパスを読み込ませるバッチファイルを動かしています)

ビルドの方法?は

こちらについては、次の記事をご参考ください。
開発始めたとき、まとめたものがあります。
84taka-y.hateblo.jp

ビルドを早くしたい

これ、未だに結論がでない(というか調べないだけ)のですが、
実際のところ、開発環境からのビルド、MSBuildどちらが高速なのか。
こればかりは、何とも言えませんが、複数をビルドしたい場合はやはりバッチファイルでできるMSBuildに軍配が上がるように思います。

また、最近知ったこととして、オプションで「/m(/mp)」オプションがあります。
これを使うと、最大で使いたいCPUコア数を指定できるとか。
メリットかもしれませんね。

ここまで書いてきてスムーズじゃねえか!と言われかねないのですが、
ビルドを行うと色々とエラーにも遭遇します。
先ほどご紹介したブログにもありますが、

C:\Program Files (x86)\Embarcadero\Studio\15.0\Imports\xxxxxxxxxx_OCX.h(66): error F1004: コンパイラ内部のエラー at 0x4fe0fd with base 0x400000
C:\Program Files (x86)\Embarcadero\Studio\15.0\Imports\xxxxxxxxxx_OCX.h(66): error F1004: コンパイラ内部のエラー

これが結構な頻度で出るのは何とかしてほしい。
出た後は、開発環境を立ち上げて、コンパイルをすると、すんなり行くこともしばしば。

また、そこまでビルドをしても、時々LME288エラーだったかな、が起きます。ここまでくるとどうしようもありません。
PCを再起動してください。

再起動するしか、方法はないです。

メモリの上限関係らしいので、ilink32.exeのファイル内部フラグを変更する方法もあるのですが、
それだけでは解消できない場合は、おとなしく「パソコン」を再起動してください。
開発環境を再度立ち上げるだけでは、解消しません。


とまあ色々なことがありましたが、それを抜きにしても
MSBuildでビルドできるようになったおかげで、Windowsのメリットを享受できているのかな、と思いたい。
そんなやまぴです。

最後に

私は、普段、新潟でMSにターゲットを絞った勉強会も行っています。
気になった方は、ぜひ声をかけてくださいね!
ngtnet.connpass.com

さて、愛知への帰路の途中。
なんとか、今日かけてよかったです・・・(笑)
お次の方、よろしくね!!