2011-01-27 57 views
0

我有一個由少量文件組成的簡單應用程序。這些文件是 apptest.c,apptest.h,apptest.S。讓我感到困惑的是,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編譯器(20世紀80年代,不是2010年)。

鑑於顯示的順序,似乎不太可能做任何有用的事情。

1

這是一種奇怪的做事方式,但它通過編譯apptest.c將apptest.S的預處理版本粘貼到彙編代碼輸出的末尾。最終結果將是從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