Компилятор Small Device C (SDCC) создаст файл ihx (Intel Hex), даже если во время шага соединения будут неопределенные ошибки ссылок.Такое поведение вызывает проблемы при использовании SDCC в Makefile, потому что, если вы установили файл ihx в качестве цели make, то make не сможет узнать, что предыдущая попытка связать не удалась.
IsЕсть ли способ сказать SDCC, чтобы подавить вывод ihx, когда существует неопределенная ссылка во время соединения?Если нет, то какой лучший обходной путь? (я уже думал об одном).
Кроме того, меня интересует , почему SDCC был разработан таким образом, если кто-нибудь знает.
Вот пример проблемы:
У вас есть файл с именем test.c, который вызывает неопределенную функцию:
void foo();
void main()
{
foo();
}
У вас естьпростой Makefile для создания test.ihx из test.c:
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.
Но make не пытается скомпилировать это, потому что SDCC уже создал ihxфайл.