为什么 gcc 11.3.0 将“a-”附加到依赖文件名?

问题描述 投票:0回答:1

在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 makefile dependencies c-preprocessor
1个回答
0
投票

在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
变量的帮助下构建的,那么这种事情可能会悄悄发生。

© www.soinside.com 2019 - 2024. All rights reserved.