问题标签 [compiler-flags]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
8226 浏览

gcc - 什么标志使 GCC 关于文件结尾没有换行符的警告静音?

我刚刚阅读了这篇关于为什么存在换行警告的帖子,但老实说,我的团队有一些人在几个不同的平台上工作,并与几个不同的编辑器一起工作(每个人都使用最适合他们的东西),所以警告已经无处不在,而且因为它不是真正值得关注的警告已成为噪音,并使查找严重警告变得麻烦。

很多时候重要的警告都被忽视了,因为人们已经习惯了无数无用的警告经过,所以他们显然只是停止仔细查看它们,恕我直言。可以说在我们的案例中,GCC 哭得太狼狈了,以至于任何人都不再认真对待它,这是一种不好的态度,但它只是人性。

现在我们用 编译-Wall,因为我们想要警告,但是是否有一个计数器标志来避免换行警告?

注意:我仔细阅读了手册,但没有在任何明显的地方找到答案,所以我放弃了。

注意:作为对 Robert Gamble 完全合理的解决方案的回应,我们的代码是跨平台的,并且我们有人员并在 Linux、Solaris 和 Windows 上构建,因此新行……尚未达成共识。并且某人的编译器总是会哭狼。因为有超过 40 名开发人员,以及其他非程序员人员。

0 投票
6 回答
846 浏览

c - 简单浮点运算的奇怪结果 - 糟糕的 FPU 内部状态?

我有一个软件项目,有时我会从小的、简单的浮点运算中得到奇怪的结果。我假设我错过了一些东西,并且想要一些关于如何调试以下问题的提示:

(使用的编译器是 MS VC 6.0,即 Microsoft C 编译器的 12 版)

第一个异常:

由于某种原因,计时器评估失败并且计时代码从未执行。在调试器中,可以看到触发条件实际上是正确的,但 FPU 拒绝找到肯定的结果。以下代码段没有问题,尽管它执行相同的操作。通过插入可能允许失败的虚假评估来回避这个问题。

我猜 FPU 状态在某种程度上被早期执行的操作所污染,并且有一些编译器标志会有所帮助?

第二个异常:

结果是#IND,即使调试器将等式计算为大约 0.05。当使用 fld 指令将 2.0F 值加载到 FPU 时,#IND 值出现在 FPU 堆栈中。上一条指令使用 fild 指令将整数值 2000 作为双浮点数加载。一旦 FPU 堆栈包含 #IND 值,所有内容都将丢失,但调试器再次评估公式没有问题。稍后,这些操作会返回预期的结果。

此外,FPU 问题再次发生在函数调用之后。我应该在每个新函数之后插入清除 FPU 状态的浮点操作吗?是否存在可能以某种方式影响 FPU 的编译器标志?

在这一点上,我很感激所有的提示和技巧。

编辑:我设法通过在顶部函数中首先调用汇编函数 EMMS 来避免这个问题。这样,FPU 就可以清除在调用我的代码的环境中创建或未创建的任何 MMX 相关垃圾。FPU 的状态似乎不是理所当然的。

//坦率

0 投票
5 回答
70472 浏览

c++ - 使用 g++ 制作静态库的优化和标志

我刚开始在 Linux 上使用 g++ 编译器,并在编译器标志上遇到了一些问题。这是他们

优化

我在 g++ 手册页中阅读了有关优化标志-O1的信息。我不明白何时使用这些标志。通常你使用什么优化级别?g++ 手册对.-O2-O3-O2

进一步优化。GCC 执行几乎所有支持的优化,不涉及空间速度折衷。当您指定 -O2 时,编译器不会执行循环展开或函数内联。与 -O 相比,此选项增加了编译时间和生成代码的性能。

如果它不进行内联和循环展开,如何实现上述性能,是否推荐使用此选项?

静态库

如何使用 g++ 创建静态库?在 Visual Studio 中,我可以选择一个类库项目,它将被编译成“lib”文件。g ++中的等价物是什么?

0 投票
2 回答
1771 浏览

qt - 如何通过 Qt 项目文件将命令的输出作为编译器标志传递?

我正在尝试将“git describe”的输出添加到我的应用程序的 about 窗口中,这样更容易找出人们使用的应用程序版本。

我可以通过添加以下编译器标志来做到这一点: -DAPP_VERSION="$(git describe HEAD)"

但是由于该项目是基于qmake的,所以我想找到一种方法将其放入Qt项目文件中。这可能吗?如果是这样,怎么办?

编辑:我尝试添加以下内容:

QMAKE_CXXFLAGS += -DAPP_VERSION="$(git describe HEAD)"

但它只是给了我“-DAPP_VERSION=”,所以我想我必须使用一些转义字符,但我不知道哪些以及在哪里。:/

0 投票
5 回答
2897 浏览

c - 我应该使用什么预处理器指令或其他方法来辨别 32 位和 64 位环境?

我想为 32 位和 64 位系统编译以下C程序。

我一直在做的Makefile是传递-m32-64制作特定于位的二进制文件:

这很好用,但是我在编译时遇到了警告:

我想做的是在没有两个 main.c 文件用于两个“位”目标的情况下修复此警告。

是否有一个#ifndef或其他预处理器条件可以添加到第 14 行main.c来处理这种差异?

或者有没有更好的方法来处理这个问题?

编辑:我使用了以下解决方案:

0 投票
6 回答
40988 浏览

c++ - 至强的 gcc 优化标志?

我想要您输入在优化 Xeons 时使用哪些 gcc 编译器标志?

mtune 或 March 中没有“至强”,那么哪个是最接近的匹配?

0 投票
3 回答
872 浏览

c - 忽略符号的 C 编译器标志

我目前正在处理从第三方承包商购买的代码。一个结构有一个无符号字符字段,而他们将该字段传递给的函数需要一个有符号字符。编译器不喜欢这样,因为它认为它们是不匹配的类型。然而,它显然是为那个承包商编译的。一些谷歌搜索告诉我“[i]t 是实现定义的 char 对象是否可以保存负值”。承包商的编译器可以基本上忽略有符号/无符号类型并同样对待它们吗?或者是否有一个编译器标志将它们视为相同?

C 不是我最强的语言——只要看看我的用户页面上的标签——所以任何帮助都将不胜感激。

0 投票
1 回答
207 浏览

gcc - 以“tree”开头的 gcc 标志有什么特别之处?

有很多以.开头的优化设置tree。有些是:

这些旗帜有什么特别之处?

0 投票
1 回答
4215 浏览

c - -symbolic 和 -shared GCC 标志之间有什么区别?

从文档的描述来看,它们似乎做同样的事情,除了“并非所有系统”支持共享和“只有一些系统”支持符号(不清楚这些是否是同一组系统):

-shared 生成一个共享对象,然后可以将其与其他对象链接以形成可执行文件。并非所有系统都支持此选项。为了获得可预测的结果,您还必须在指定此选项时指定用于生成代码的同一组选项(-fpic、-fPIC 或模型子选项)。 [1]

-symbolic 在构建共享对象时绑定对全局符号的引用。警告任何未解析的引用(除非被链接编辑器选项 -Xlinker -z -Xlinker defs 覆盖)。只有少数系统支持此选项。

我怀疑区别在于“生成一个共享对象,然后可以将其与其他对象链接以形成可执行文件”部分,但这听起来像是任何库都适用的东西。这是否意味着生成的共享对象也可以静态链接?

0 投票
1 回答
2074 浏览

iphone - Xcode:构建特定于每个文件编译器构建设置的体系结构

在我的 iPhone 项目中,我使用了一些内联 asm,如果目标架构是设备而不是模拟器,则将其排除在外。

由于某些内联 asm 代码仅是 arm 而不是 thumb 我需要在为 iPhone 编译它时指定 c 标志 -marm,否则它会尝试使用 thumb 指令编译代码。

如果我在文件特定的构建设置中输入 -marm 标志,这就是问题所在,如果我为模拟器编译,gcc 会输出错误:

cc1obj:错误:无法识别的命令行选项“-marm”

只有当目标架构是arm时,有没有办法通过这个选项?我知道你可以用全局 c 标志来做,但我不想用 -marm 标志编译我的整个项目。我只想要几个.m 文件是-marm。

谢谢和问候,金