링크 단계에서 Makefile에서 SDCC를 사용하는 문제
-
27-09-2020 - |
문제
SDCC (Small Device C Compiler)는 링크 단계에서 정의되지 않은 참조 오류가있는 경우에도 IHX (Intel Hex) 파일을 생성합니다. 이 문제는 ihx 파일을 만들어서 만들기 위해 ihx 파일을 설정하면 링크에서 이전 시도가 실패했음을 알 수 없으므로 makefile에서 SDCC를 사용할 때 문제가 발생합니다.
은 연결 중에 정의되지 않은 참조가있을 때 SDCC를 SDCC에 IHX 출력을 억제 할 수있는 방법이 있습니까? 그렇지 않다면, 가장 좋은 해결 방법은 무엇입니까? (나는 이미 하나를 생각했다).
또한 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 파일을 작성했기 때문에 작성하지 마십시오.
해결책
SDCC에 대해서는 아무 것도 모릅니다. 따라서 출력을 억제 할 수 있는지 여부에 대해 질문에 답변 할 수 없거나 SDCC가 그런 식으로 설계되었는지에 대해 답변해서 죄송합니다.
작업을 수행 할 수 있습니다. 성공적인 빌드 후에 ihx 파일의 이름을 바꾸고 새 이름을 대상으로 사용하십시오.