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

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

C++Builder+MSBuildでのビルドについて

C++Builder+MSBuild

普段の開発でC++Builderを使うのですが、C++BuilderMSBuild対応になってきました。開発環境にVC系とC++Builder系が混ざっている事情があり、ビルドエンジンをMSBuildで統一するということを進めています。

 

基本的にはMSBuildへのビルドバッチでOKなのですが、困ったことも。

 MSBuildへの引数の違い

MSBuildへ渡すプロジェクトについては、困ることはありませんでした。
最新環境は全てMSBuild対応。

しかし、ビルドコマンドが違った。

VC系
MSBuild xxx.sln /t:%TARGET% /p:configuration="Release" >(ログの出力先)
%TARGET%:rebuild, ...

C++Builder
MSBuild xxx.cbproj /t:%TARGET% /p:Config="Release"  >(ログの出力先)
 %TARGET%:Build, Make, ...

/p:xxx="...."部分は自由に設定できるのですが、そもそもslnプロジェクトとcbprojectのプロパティが異なります。実際には各社のページ上で説明されていますので、ご確認を。

 

 MSBuild 本当に対応してる?

C++Builderを使っていて思うのは、これ。
例えば、このようなエラーが発生します。

Microsoft (R) Build Engine Version 3.5.30729.5420

[Microsoft .NET Framework, Version 2.0.50727.5485]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj(1154,13): warning MSB4011: There is a circular reference involving the import of file "C:\Program Files (x86)\Embarcadero\Studio\15.0\Bin\CodeGear.Cpp.Targets". This file may have been imported more than once, or you may have attempted to import the main project file. All except the first instance of this file will be ignored.
Build started 2016/01/19 18:17:09.
Project "d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj" on node 0 (Make target(s)).
スキップ中: d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj
_CppDepCheck:
スキップ中: ..\..\common\xxxxxxxxxx\xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp
変更完了: xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx.cpp;xxxxxxxxxx;xxxxxxxxxx.cpp;
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: コンパイラ内部のエラー
Done Building Project "d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj" (Make target(s)) -- FAILED.

Build FAILED.

"d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj" (Make target) (1) ->
d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj(1154,13): warning MSB4011: There is a circular reference involving the import of file "C:\Program Files (x86)\Embarcadero\Studio\15.0\Bin\CodeGear.Cpp.Targets". This file may have been imported more than once, or you may have attempted to import the main project file. All except the first instance of this file will be ignored.


"d:\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx.cbproj" (Make target) (1) ->
(_BCC32CoreCompile target) ->
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: コンパイラ内部のエラー

1 Warning(s)
2 Error(s)

Time Elapsed 00:02:17.18

 "error F1004: コンパイラ内部のエラー"自体は調べるとコンパイラ内部のエラーということで通常は起こらないとか。

内部エラーを解決する(C++) - RAD Studio

プロジェクトを単体でビルドするとエラーはない(BCC32コンパイラが動作するため)ことからいくと、MSBuildとの相性の問題かな、と思うこともしばしば・・・。