2011-02-16 72 views
1

是否有宏或全局變量,通過它我可以瞭解當前翻譯單元將用於C中的目標文件的名稱?我只知道源文件宏。由當前翻譯單元編譯的對象的名稱C

謝謝。

+0

對於具有預編譯頭文件的編譯器來說,這會很困難。 – 2011-02-16 14:44:21

回答

5

不能在標準C.

預處理器可以實現爲一個單獨的程序有沒有對象文件的知識,所以它不可能是一個內置的宏。

編譯器在理論上可以產生一個帶有目標文件名的符號,但一旦目標文件被用戶重命名,該符號就會失效。

你可以構建系統#define對象名稱:

# Compile ${module}.c to ${module}.o 
cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${module.o} ${module}.c 

但有關重命名問題依然存在。

(這只是一個殼代碼片段,但它也可以變成一個Makefile規則,我想。)

+1

我認爲你的第三段是最重要的一點。你真正可以得到這些信息的唯一方法是從*鏈接器*。如果您打開了調試程序,它可能仍會嵌入到可執行文件中,但您必須轉到平臺的調試API(或自行進行逆向工程)以獲取信息。這不是微不足道的。 – 2011-02-16 14:46:34

0

我不認爲這存在。我唯一能想出的就是你可以使用## glue宏將__FILE__與「.o」結合起來......但即使這樣也不是你要求的那樣,因爲你會得到foo.c.o.