当前翻译单元在C语言中编译的对象的名称
是否有一个宏或全局变量,通过它我可以了解C中当前翻译单元将用于的目标文件的名称?我只知道源文件宏 谢谢。不在标准C中 预处理器可以作为一个单独的程序来实现,它不知道对象文件,因此它不能是一个内置宏 理论上,编译器可以生成具有对象文件名的符号,但一旦用户重命名对象文件,该符号就会失效 您可以让生成系统定义对象名称:当前翻译单元在C语言中编译的对象的名称,c,C,是否有一个宏或全局变量,通过它我可以了解C中当前翻译单元将用于的目标文件的名称?我只知道源文件宏 谢谢。不在标准C中 预处理器可以作为一个单独的程序来实现,它不知道对象文件,因此它不能是一个内置宏 理论上,编译器可以生成具有对象文件名的符号,但一旦用户重命名对象文件,该符号就会失效 您可以让生成系统定义对象名称: # Compile ${module}.c to ${module}.o cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${
# Compile ${module}.c to ${module}.o
cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${module.o} ${module}.c
但关于更名的问题仍然存在
这只是一段shell代码,但我想可以将其转换为Makefile规则。不是在标准C中
预处理器可以作为一个单独的程序来实现,它不知道对象文件,因此它不能是一个内置宏
理论上,编译器可以生成具有对象文件名的符号,但一旦用户重命名对象文件,该符号就会失效
您可以让生成系统定义对象名称:
# Compile ${module}.c to ${module}.o
cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${module.o} ${module}.c
但关于更名的问题仍然存在
这只是一段shell代码,但我想它可以转换成一个Makefile规则。我认为这是不存在的。我唯一能想到的就是你可以使用glue宏将_文件_______________________________。。。但即使这也不是你想要的,因为你会得到食品安全办公室。我认为这是不存在的。我唯一能想到的就是你可以使用glue宏将_文件_______________________________。。。但是,即使这也不是你想要的,因为你会得到foo.c.o.这对于具有预编译头的编译器来说有点困难。对于具有预编译头的编译器来说,这有点困难。我认为你的第三段是最重要的一点。你能真正得到这些信息的唯一途径是从链接器。如果您启用了调试,它可能也会嵌入到可执行文件中,但您必须转到平台的调试API或自己对其进行反向工程以获取信息。这可不是小事。你对重命名的对象文件的反对意见很大。我想用不同的编译选项从一个源文件中生成不同的目标文件,将不同版本的目标文件相应地链接到我程序的不同版本,并让我们在运行时识别每个已链接的组件,以使协议输出更具可读性。@user411768:在构建系统中执行此操作。我认为您的第三段是最重要的一点。你能真正得到这些信息的唯一途径是从链接器。如果您启用了调试,它可能也会嵌入到可执行文件中,但您必须转到平台的调试API或自己对其进行反向工程以获取信息。这可不是小事。你对重命名的对象文件的反对意见很大。嗯,我想用不同的编译选项从一个源文件生成不同的目标文件,将不同版本的目标文件相应地链接到我的程序的不同版本,并在运行时标识已链接的每个组件,以使协议输出更具可读性。@user411768:在生成系统中执行此操作。