スモールデバイスCコンパイラ(SDCC)は、リンクステップ中に未定義の参照エラーが発生した場合でも、ihx(Intel Hex)ファイルを生成します。この動作により、MakefileでSDCCを使用するときに問題が発生します。これは、ihxファイルをmakeターゲットに設定した場合、makeには、以前のリンクの試みが失敗したことを知る良い方法がないためです。
リンク中に未定義の参照がある場合にihx出力を抑制するようにSDCCに指示する方法はありますか?そうでない場合、最善の回避策は何ですか?(私はすでに1つを考えました)。
また、誰かが知っているなら、なぜSDCCがこのように設計されたのか興味があります。
問題の例を次に示します。
未定義の関数を呼び出すtest.cというファイルがあります。
void foo();
void main()
{
foo();
}
test.cからtest.ihxを構築するための単純なMakefileがあります。
test.ihx: test.c
sdcc test.c
test.cを初めてコンパイルしようとすると、失敗します。
C:\test>make
sdcc test.c
?ASlink-Warning-Undefined Global '_foo' referenced by module 'test'
make: *** [test.ihx] Error 1
ihxの依存関係ではないもの(Makefileなど)を変更して問題を修正し、再度コンパイルしてみてください。
C:\test>make
make: `test.ihx' is up to date.
ただし、SDCCはすでにihxファイルを作成しているため、makeはコンパイルを試みません。