2011-01-27 3 views
0

У меня есть простое приложение, состоящее из небольшого количества файлов. Файлы: apptest.c, apptest.h, apptest.S. Что меня немного сбивает с толку - это та часть, где вступает в игру 10 apptest_AUTO.s. У кого-нибудь есть идея, в чем цель этого? Я мог представить себе, что другая копия кода ассемблера выполняется после того, как обрабатывается предварительным процессором, прежде чем он будет фактически использоваться в качестве входа в сборку?Другой вопрос в Makefile

CC=/bin/sparc-elf-gcc 
CPP=/bin/sparc-elf-cpp 
CIS_ASM=bin/sparc-elf-as 

all: apptest.exe 

apptest.exe: apptest.o 
$(CC) apptest.o -o apptest.exe 

apptest.o: apptest.c apptest.h apptest.S 
$(CC) $(SFLAGS) apptest.c -o apptest_AUTO.s 
$(CPP) apptest.S >> apptest_AUTO.s 
$(CIS_ASM) apptest_AUTO.s -o apptest.o 

ответ

1

Кому-то нужна возможность автоматического изменения источника ассемблера перед его компиляцией в код объекта. Я видел это раньше, а не для SPARC, но, как правило, гораздо более старые архитектуры (M680x0, Z8000) и многие старые компиляторы C (1980-е, но не 2010).

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

1

Это странный способ сделать что-то, но он вставляет предварительно обработанную версию apptest.S в конец вывода кода ассемблера, компилируя apptest.c. Конечным результатом будет один объектный файл, который построен как из apptest.c, так и apptest.S.

Похоже, взломщик предотвращает совпадение имен между двумя объектными файлами. Более традиционный подход будет примерно таким, как:

CC=/bin/sparc-elf-gcc 
CPP=/bin/sparc-elf-cpp 
CIS_ASM=bin/sparc-elf-as 

all: apptest.exe 

apptest.exe: apptest.o apptest.s.o 
    $(CC) $+ -o apptest.exe 

apptest.o: apptest.c apptest.h 
    $(CC) $(CFLAGS) apptest.c -o apptest.o 

apptest.s.o: apptest.s 
    $(CIS_ASM) apptest.s -o apptest.s.o 
Смежные вопросы