在gcc 11.3.0下,输入命令gcc -M -MD sourcefile.c,会创建一个名为“a-sourcefile.d”的文件。但是,在 gcc 9.4.0 下,“a-”前缀不存在。
这是正确的行为吗?
我期待没有“a-”前缀的.d文件。
编辑:我在使用 makefile 时注意到了这个问题,但我可以在没有 makefile 的情况下使用手动输入的命令重现该问题。
更多详细信息:
我有两台不同的机器: 机器 1:
$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
机器2:
$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
假设每台机器都有包含 3 个文件的相同目录:main.c、library.c 和 library.h。
main.c的内容:
#include <stdio.h>
#include "library.h"
int main(void)
{
printf("Hello world\n");
LibFunc1();
return 0;
}
图书馆.c:
#include <stdio.h>
#include "library.h"
void LibFunc1(void)
{
puts("Library Function 1");
}
图书馆.h:
void LibFunc1(void);
命令在两台机器上运行:
gcc -M -MD library.c
gcc -M -MD main.c
机器 1 上目录的内容:
$ ls
library.c library.d library.h main.c main.d
机器 2 上目录的内容:
$ ls
a-library.d a-main.d library.c library.h main.c
那么,为什么会出现差异?没有生成文件,没有使用特殊变量(据我所知,除非有一些持久的环境变量)。
Machine 2 是全新安装,并在输入命令之前启动。
在gcc 11.3.0下,输入命令gcc -M -MD sourcefile.c,会创建一个名为“a-sourcefile.d”的文件。但是,在 gcc 9.4.0 下,“a-”前缀不存在。
在
GCC 11相对于
GCC 9中,
-M
或 -MD
选项的行为没有记录差异。这些已经稳定了相当长的时间,所以我认为这...
我期待没有“a-”前缀的.d文件。
... 是一个合理的期望。事实上,我认为这是 so 合理的,特别是根据文档,我倾向于猜测问题与问题中描述的不一样。可能指定了一个或多个额外的命令行选项,或者源文件名可能与声明的不一样。例如,如果构建命令是在
make
变量的帮助下构建的,那么这种事情可能会悄悄发生。