Проблема с использованием SDCC в Makefile во время шага ссылки - PullRequest
1 голос
/ 22 июля 2010

Компилятор 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файл.

1 Ответ

1 голос
/ 22 июля 2010

Я ничего не знаю о sdcc, поэтому мне жаль, что я не могу ответить на ваши вопросы относительно того, можно ли подавить вывод или почему sdcc был спроектирован таким образом.

Я могу придуматьОбходной путь: переименуйте файл ihx после успешной сборки и используйте новое имя в качестве цели make.

...