gpt4 book ai didi

gcc - 如何让 gcc 使用 March=native 作为默认值?

转载 作者:行者123 更新时间:2023-12-04 18:49:23 33 4
gpt4 key购买 nike

有没有办法更改规范文件,使其通过 -march=native如果在命令行中没有指定任何内容?

默认规范文件中的相关内容是:

*cc1:
%(cc1_cpu)

*cc1_cpu:
%{march=native:%>march=native %:local_cpu_detect(arch) %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} %{mtune=native:%>mtune=native %:local_cpu_detect(tune)}

我不确定规范是如何工作的。只需指定 -march=native之前或之后 %(cc1_cpu)不起作用。但是,这一行确实有效,因为如果我输入 -something_wierd,GCC 会报错而不是 -march=native .

我注意到的另一件事是如果我输入 %{march=i386:-something_wierd}之前 %(cc1_cpu) , gcc 报告错误,看起来像 -march=i386如果未指定任何内容,则始终传入,因此有没有办法区分未指定内容和 -march=i386在规范文件中?

顺便说一句,是什么 %>做?好像没有指定 in the documentation .

我正在使用 MinGW 的 gcc-4.6.2 .

最佳答案

引用你最后一个问题: gcc 4.6.1 源( gcc/gcc.c )包含以下关于 %> 的评论:

 %>S    Similar to "%<S", but keep it in the GCC command line.

为了完整起见,请遵循 %< 的评论形成相同的文件:
 %<S    remove all occurrences of -S from the command line.
Note - this command is position dependent. % commands in the
spec string before this one will see -S, % commands in the
spec string after this one will not.

简单回答第一个问题:对,但是 ....

...我发现的唯一通用解决方案有一个明显的缺点,即 -march选项将被忽略,因此每次构建都像 -march=native 一样完成已被指定。无论如何,有一个解决方法。

1 解决方案(没有解决方法)

创建一个名为让我们说 specs.nativealways 的规范文件包含:
*cc1_cpu:
%<march=* -march=native %>march=native %:local_cpu_detect(arch) %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)} %{mtune=native:%>mtune=native %:local_cpu_detect(tune)}

当使用规范文件时(例如通过调用 gcc 和选项 -specs=specs.nativealways),构建将像 -march=native 一样完成被指定(有提到的缺点,任何出现的选项 -march=<arch> 都会被忽略)。

2 解决方法

为了仍然能够覆盖新配置的默认行为,可以使用上述规范文件的修改版本,引入一个名为 -myarch 的新选项。使用与 -march 相同的语法(除了 -myarch=native ,它不起作用,它不符合 native 现在是默认值)。

修改后的规范文件如下所示:
*cc1_cpu:
%<march=* %{myarch=*:%<myarch* -march=%* ; :-march=native %>march=native %:local_cpu_detect(arch) %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} %{mtune=native:%>mtune=native %:local_cpu_detect(tune)}

PS:这已经在 Linux 上使用 gcc 4.6.2 进行了测试,但应该适用于 MinGW。

关于gcc - 如何让 gcc 使用 March=native 作为默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705773/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com