不在标准C.
预处理器可以实现为不了解目标文件的单独程序,因此它不能是内置宏.
理论上,编译器可以生成带有目标文件名的符号,但只要用户重命名目标文件,该编号就会失效.
您可以将构建系统获取到#define对象名称:
# Compile ${module}.c to ${module}.o
cc ${CPPFLAGS} ${CFLAGS} -DOBJNAME=${module}.o -c -o ${module.o} ${module}.c
Run Code Online (Sandbox Code Playgroud)
但关于重命名的观点仍然存在.
(这只是一段shell代码,但Makefile我认为它可以变成规则.)