标签: compiler-flags

如何告诉 gcc 保留我未使用的标签?

编辑:感谢@NateEldredge,我在如何在 C 源文件中“标记”位置以供以后断点定义中更好地定义了我的问题?


我使用这些标签在 gdb 中设置断点。因此,无论我在标签之后/之前添加/删除代码行,断点仍然是正确的。

如果我添加-Wno-error=unused-label到编译选项,编译器不会对我大喊大叫,但标签会从程序集中消失。

相反,如果我__attribute__((unused))在代码中使用,结果是相同的:没有抱怨,但标签消失了。

有没有正确的方法来完成这个任务(而不仅仅是黑客)?

这是我的玩具示例:

int main(void){
    int a = 15;
 label: __attribute__((unused))
    a = a + 23;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

编译后结果为:

main:
        push    ebp
        mov     ebp, esp
        sub     esp, 16
        mov     DWORD PTR [ebp-4], 15
        add     DWORD PTR [ebp-4], 23
        mov     eax, DWORD PTR [ebp-4]
        leave
        ret
Run Code Online (Sandbox Code Playgroud)

这是同一示例的交互式版本: https: //godbolt.org/z/zTqd9bM6q


int main(void){
    int a = 15;
 label: __attribute__((unused))
    a = a + 23;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

c assembly gcc compiler-flags

12
推荐指数
2
解决办法
979
查看次数

我应该优化多少?

关于编译器(GCC)所做的优化,标准做法是什么?每个选项(-O,-O1,-O2,-O3,-Os,-s,-fexpensive-optimizations)的作用有何不同,我如何确定最佳选项?

gcc compiler-flags compiler-optimization

11
推荐指数
1
解决办法
2456
查看次数

Xcode 5相当于Build Settings中的NS_BLOCK_ASSERTIONS

在Xcode 5之前,可以NSAssert使用默认的构建设置阻止发布版本包含语句及其变体:

OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
Run Code Online (Sandbox Code Playgroud)

此设置可project.pbxproj在此处找到并在Xcode中设置:

在此输入图像描述

(请注意,此抓取是从转换为Xcode 5的Xcode 4项目中获取的.)

每个目标只在Release版本中继承此设置.显然这是一件好事.该应用程序可能无论如何都会挣扎,而不是立即崩溃.而对于Debug版本,您希望在NSAssert失败时立即知道.

但是,我很难找到Xcode 5中的等价物.

使用默认模板创建新项目不会显示等效设置:

在此输入图像描述

我的问题是,Xcode 5中的等效设置是什么,还是NS_BLOCK_ASSERTIONS必须手动添加到Other C FlagsRelease版本中?

compiler-construction xcode build compiler-flags xcode5

11
推荐指数
1
解决办法
2151
查看次数

如何在由Cmake生成的ALL_BUILD和ZERO_CHECK Visual Studio 2013项目中将unicode设置为字符集?

我目前正在使用CMake创建一堆Visual Studio 2013项目,它的工作原理.但是,自动创建的ZERO_CHECK和ALL_BUILD项目默认设置为使用MBCS,尽管我希望它们使用Unicode字符集.

我确实为我的项目指定了Unicode字符集的使用,具体如下:

ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)
Run Code Online (Sandbox Code Playgroud)

它起作用了.我尝试用以下内容设置c ++编译器标志:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /UMBCS /D_UNICODE /DUNICODE")
Run Code Online (Sandbox Code Playgroud)

甚至 :

ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)
Run Code Online (Sandbox Code Playgroud)

在我的项目设置之前,但它根本不影响ZERO_CHECK和ALL_BUILD.有任何想法吗 ?

unicode cmake compiler-flags visual-studio-2013

11
推荐指数
1
解决办法
1万
查看次数

通过cabal(cabal-install)在命令行指定ghc选项,而无需编辑包的.cabal文件

当我安装vector时:

cabal install vector
Run Code Online (Sandbox Code Playgroud)

我得到了很多SpecConstr限制警告,如果我可以指定,它会消失-fspec-constr-count=SOMETHING-HIGHER.

  1. cabal install vector -fspec-constr-count=HIGH
    
    Run Code Online (Sandbox Code Playgroud)

    工作?

  2. 如果X依赖vector,是否有一种方式可以说X.cabalvector最好依赖(如果X还没有安装)-fpsec-constr-count=HIGH

  3. vector仍然保持还是有现在一个更值得推荐的选择吗?

haskell vector compiler-flags ghc cabal

10
推荐指数
1
解决办法
2791
查看次数

何时使用某些优化,例如-fwhole-program和-fprofile-generate与多个共享库

可能是一个简单的答案; 对于其中一些标志,我对GCC文档中使用的语言感到很困惑!

无论如何,我有三个库和一个使用这三个的程序.我用各个(可能)不同的警告标志集分别编译我的每个库.但是,我使用相同的优化标志集编译所有三个库.

然后我编译我的主程序链接在这三个库中,它们有自己的一组警告标志和库编译时使用的相同优化标志.

1)我是否必须使用优化标志编译库,或者我可以在编译最终程序并链接到库时使用这些标志?如果是后者,那么它会优化这些库中的所有代码还是仅仅代表某些代码(可能是所谓的代码)?

2)我想使用-fwhole-program -flto -fuse-linker-plugin和链接器插件gold.我在哪个阶段编译这些......只是最后的编译或者在编译库时是否需要存在这些标志?

3)与2)几乎相同,但是-fprofile-generate -fprofile-arcs和-fprofile-use.我理解首先运行一个带有generate的程序,然后使用.但是,我是否必须使用generate/use等编译每个库或仅使用最终程序?如果它只是最后一个程序,那么当我使用-fprofile-use进行编译时,它是否还会优化库功能?

gcc compiler-flags compiler-optimization

10
推荐指数
1
解决办法
3884
查看次数

设置Java编译器合规性级别

我需要在命令行上编译Java程序,我试图将编译器级别设置为较低的(1.6).我试过这样但是没有用:

javac -1.6 Hello.java
Run Code Online (Sandbox Code Playgroud)

java javac compiler-flags

10
推荐指数
2
解决办法
9101
查看次数

在Qt项目中禁用-Wall编译器警告?

我正在编译第三方库,并不关心修复库中存在的警告,但我不希望它们污染Qt Creator中的" 问题"窗格.

我已经尝试过遵循这里的建议,但是-Wall在启用后没有编译器标志可以禁用,例如-Wno-enum-compare.

看完这个,我试图消除标志,如下所示:

CFLAGS -= -Wall
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.所以我尝试了这个建议:

QMAKE_CXXFLAGS_WARN_OFF -= -Wall
Run Code Online (Sandbox Code Playgroud)

依然没有.

所以我查看了生成Makefile并发现了这个:

CFLAGS        = -pipe -g -fPIC -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS      = -pipe -g -fPIC -Wall -W -D_REENTRANT $(DEFINES)
Run Code Online (Sandbox Code Playgroud)

所以我尝试从这两个变量中删除标志:

CFLAGS -= -Wall
CXXFLAGS -= -Wall
Run Code Online (Sandbox Code Playgroud)

依然没有.你打算如何删除这个编译器标志?!

c++ qt warnings qmake compiler-flags

10
推荐指数
2
解决办法
2万
查看次数

基于Sandy Bridge的Pentium的特定架构特定选项(-m)是什么?

我正在试图弄清楚如何-march正确设置选项,以查看使用gcc 4.7.2在我的电脑上启用和禁用选项之间的性能差异.

在尝试编译之前,我试图找到什么是-march我的电脑的最佳选择.我的电脑有Pentium G850,其架构是Sandy Bridge.所以我提到了gcc 4.7.2手册,发现它-march=corei7-avx似乎是最好的.
但是,我记得基于Sandy Bridge的Pentium缺乏AVX和AES-NI指令集支持,Pentium G850也是如此.所以-march=corei7-avx不是一个合适的选择.

我想出了一些潜在的选择:

  1. -march=corei7-avx -mno-avx -mno-aes
  2. -march=corei7 -mtune=corei7-avx
  3. -march=native

考虑到我的信息,第一个选项看起来很合理,但我担心除了AVX和AES-NI之外可能缺少其他功能.第二种选择看起来很安全,但由于它可能会错过Sandy Bridge上的一些小功能-march=corei7.第三个选项将解决我的所有问题,但我听说这个选项有时会误检测CPU的功能,所以我想知道如何手动执行此操作.
我用Google搜索并搜索了StackOverflow和SuperUser,但我找不到任何明确的解决方案......
应该设置哪些选项?

gcc compiler-flags compiler-optimization

9
推荐指数
2
解决办法
1万
查看次数

如何减轻英特尔 jcc 勘误对 gcc 的影响?

如果我有一个受Intel jcc erratum约束的芯片,我如何在 gcc 中启用缓解(它调整分支位置以避免有问题的对齐),以及哪些 gcc 版本支持它?

x86 gcc intel compiler-flags

9
推荐指数
1
解决办法
139
查看次数