まず手始めは「旧ボーランドBCC32.exe(Ver5.5.1)との互換性」です。
先に作った簡単なウィンドウプログラムでありHelloWorldをBCCDeveloperとBCC325.5でコンパイルすると当然に完了します。
ところが実行ファイルHelloWorld.exeと同じReleaseフォールダーに入っているHelloWorld.makを使って、コンパイラーをbcc32c、リソースコンパイラーをrc.exeにしてコンパイルすると、
とエラーになります。(なお、コンパイラーをbcc32、リソースコンパイラーをbrc32.exeにしてコンパイルすれば勿論成功します。)
画面ではわかりにくいので、コンパイラーのエラー出力を下に示します。
【bcc32cのエラーメッセージ】
MAKE Version 5.41 Copyright (c) 1987, 2014 Embarcadero Technologies, Inc.
"C:\Borland\BCC102\bin\bcc32c.exe" -W -6 -O2 -w- -AT -pc -H- -k -b -I"C:\Borland\BCCForm" -o"C:\Users\ysama\Programing\Borland C++\HelloWorld\Release\HelloWorld.obj" -c "C:\Users\ysama\Programing\Borland C++\HelloWorld\HelloWorld.cpp"
Embarcadero C++ 7.30 for Win32 Copyright (c) 2012-2017 Embarcadero Technologies, Inc.
Warning: option '-6' is not supported in Clang-based compiler.
Warning: option '-H-' is not supported in Clang-based compiler.
Warning: option '-k' is not supported in Clang-based compiler.
C:\Users\ysama\Programing\Borland C++\HelloWorld\HelloWorld.cpp:
** error 1 ** deleting "C:\Users\ysama\Programing\Borland C++\HelloWorld\Release\HelloWorld.obj"
では、面倒くさいのでオプションを"-W"だけにしてビルドしますが、矢張りエラーとなります。また厄介なことに今度はエラーメッセージにヒントがありません。("-W"オプションに文句をつけていないことに注意してください。)
【bcc32cのエラーメッセ―ジ2】
MAKE Version 5.41 Copyright (c) 1987, 2014 Embarcadero Technologies, Inc.
"C:\Borland\BCC102\bin\bcc32c.exe" -W -I"C:\Borland\BCCForm" -o"C:\Users\ysama\Programing\Borland C++\HelloWorld\Release\HelloWorld.obj" -c "C:\Users\ysama\Programing\Borland C++\HelloWorld\HelloWorld.cpp"
Embarcadero C++ 7.30 for Win32 Copyright (c) 2012-2017 Embarcadero Technologies, Inc.
C:\Users\ysama\Programing\Borland C++\HelloWorld\HelloWorld.cpp:
** error 1 ** deleting "C:\Users\ysama\Programing\Borland C++\HelloWorld\Release\HelloWorld.obj"
「何が問題なのか?」が全くわからないので、今度はBCCSkeltonを全く使わない、C++とWin32で書いたWindowTemplate.cppと簡単なメニューテンプレートMenuTeml.rcのシンプルなウィンドウプログラムを、単なるバッチファイル
C:\borland\bcc102\bin\bcc32c -W WinTemplate.cpp > bccerror.txt
C:\borland\bcc102\bin\rc MenuTempl.rc
pause
でビルドしてみます。
結果は、
C:\Users\ysama\Programing\Windows Program\WinTemplate>C:\borland\bcc102\bin\bcc32c -W WinTemplate.cpp 1>bccerror.txt
bcc32c.exe: error: linker command failed with exit code 2 (use -Xdriver -v to see invocation)
C:\Users\ysama\Programing\Windows Program\WinTemplate>C:\borland\bcc102\bin\rc MenuTempl.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
C:\Users\ysama\Programing\Windows Program\WinTemplate>pause
続行するには何かキーを押してください . . .
とコンパイルは失敗、リソースコンパイルは成功してresファイルができています。(Microsoftだからcoffで、omfファイルではないのかな?)
またエラー出力(bccerror.txt)には、
Embarcadero C++ 7.30 for Win32 Copyright (c) 2012-2017 Embarcadero Technologies, Inc.
WinTemplate.cpp:
Turbo Incremental Link 6.91 Copyright (c) 1997-2017 Embarcadero Technologies, Inc.
Error: Unresolved external '_main' referenced from C:\BORLAND\BCC102\LIB\WIN32C\DEBUG\C0X32.OBJ
Error: Unable to perform link
コンソールアプリ("_main"ベース)になっており、"-W"をつかってもウィンドウアプリ("_winmain"ベース)ではなくなっています。
ということで、今度はエラー表示にある通り、" -Xdriver -v"を付け加え、"-W"を"-tW"にして、リソースコンパイラーもbrc32で試します。
C:\borland\bcc102\bin\bcc32c -tW -Xdriver -v WinTemplate.cpp > bccerror.txt
C:\borland\bcc102\bin\brc32 -feWinTemplate.exe MenuTempl.rc
pause
結果は、やたらメッセージが出て来ましたが、
なんとか成功です。
結論的には、
Warning: option '-6' is not supported in Clang-based compiler.
Warning: option '-H-' is not supported in Clang-based compiler.
Warning: option '-k' is not supported in Clang-based compiler.
Error: Unresolved external '_main' referenced from C:\BORLAND\BCC102\LIB\WIN32C\DEBUG\C0X32.OBJ
という警告やエラーがでましたが、bcc32cのヘルプによれば、
Embarcadero CLANG 7.30 Copyright (c) 2012-2017 Embarcadero Technologies, Inc.
Available options (* = default setting, xxx = has sub-options: use -h -X):
(Note: -X- or -w-XXX will usually undo whatever was set or unset by -X or -wXXX.
If two options conflict, the last one specified will be used.)
(省略)
-6 Generate Pentium Pro instructions
(省略)
-Hxxx Generate and use precompiled headers
(省略)
-W Target is a Windows application
(省略)
-k Generate standard stack frames
とあり、「単純にbcc32c.exeのhelp表示を信じてはいけない」、また「エラーメッセージは小出しに出されるので、今出ていなくともエラーになっていることがあり得る」ということが実証できたのではないか、と思います。
大分疲れたので、今回はここまでにします。


