Проблема с использованием SDCC в Makefile во время шага ссылки
-
27-09-2020 - |
Вопрос
Малое устройство C компилятор (SDCC) создаст файл IHX (Intel Hex), даже если на этапе ссылки есть неопределенные ссылочные ошибки. Это поведение вызывает проблемы при использовании SDCC в Makefile, потому что если вы устанавливаете файл IHX, чтобы быть вашим целевым, то не имеет хорошего способа узнать, что предыдущая попытка подключения не удалась.
Кроме того, я заинтересован в , почему SDCC был разработан таким образом, если кто-то знает.
У вас есть файл называется TEST.C, который вызывает неопределенную функцию:
void foo();
void main()
{
foo();
}
.
У вас есть простой Makefile для создания тестов .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.
.
Но сделайте не пытаться компилировать его, потому что SDCC уже создал файл IHX.
Решение
Я ничего не знаю о SDCC, поэтому извините, что не могу ответить на ваши вопросы относительно того, может ли вывод подавить или почему SDCC был разработан таким образом.
Я могу подумать о работе - вокруг: переименуйте файл IHX после успешной сборки и используйте новое имя в качестве цели Make.