2011-02-16 83 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.