导航:首页 > 源码编译 > 编译选项什么时候会变

编译选项什么时候会变

发布时间:2022-11-08 08:30:52

A. Linux 编译选项

  1. gcc -E source_file.c
    -E,只执行到预编译。直接输出预编译结果。

  2. gcc -S source_file.c
    -S,只执行到源代码到汇编代码的转换,输出汇编代码。

  3. gcc -c source_file.c
    -c,只执行到编译,输出目标文件。

  4. gcc (-E/S/c/) source_file.c -o output_filename
    -o, 指定输出文件名,可以配合以上三种标签使用。
    -o 参数可以被省略。这种情况下编译器将使用以下默认名称输出:
    -E:预编译结果将被输出到标准输出端口(通常是显示器)
    -S:生成名为source_file.s的汇编代码
    -c:生成名为source_file.o的目标文件。
    无标签情况:生成名为a.out的可执行文件。

  5. gcc -g source_file.c
    -g,生成供调试用的可执行文件,可以在gdb中运行。由于文件中包含了调试信息因此运行效率很低,且文件也大不少。
    这里可以用strip命令重新将文件中debug信息删除。这是会发现生成的文件甚至比正常编译的输出更小了,这是因为strip把原先正常编译中的一些额外信息(如函数名之类)也删除了。用法为 strip a.out

  6. gcc -s source_file.c
    -s, 直接生成与运用strip同样效果的可执行文件(删除了所有符号信息)。

  7. gcc -O source_file.c
    -O(大写的字母O),编译器对代码进行自动优化编译,输出效率更高的可执行文件。
    -O 后面还可以跟上数字指定优化级别,如:
    gcc -O2 source_file.c
    数字越大,越加优化。但是通常情况下,自动的东西都不是太聪明,太大的优化级别可能会使生成的文件产生一系列的bug。一般可选择2;3会有一定风险。

  8. gcc -Wall source_file.c
    -W,在编译中开启一些额外的警告(warning)信息。-Wall,将所有的警告信息全开。

  9. gcc source_file.c -L/path/to/lib -lxxx -I/path/to/include
    -l, 指定所使用到的函数库,本例中链接器会尝试链接名为libxxx.a的函数库。
    -L,指定函数库所在的文件夹,本例中链接器会尝试搜索/path/to/lib文件夹。
    -I, 指定头文件所在的文件夹,本例中预编译器会尝试搜索/path/to/include文件夹。

B. MDK编译选项怎么改成--cpu

<script type="text/javascript">
Leaf leaf = new Leaf("Leaf D");
root.Add(leaf);
root.Remove(leaf);
root.Display(1);
Console.Read();
}

C. 条件编译选项 什么意思

一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”。(conditional compile) 条件编译语句排版时,需考虑以下三种位置: (1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中) ◆ 条件编译关键字语句顶格左对齐; ◆ 所含的#include语句(块) #define语句(块)甚至是被嵌套下级条件编译语句块,按照语句块嵌套的排版方式进行缩进排版 。 (2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中) 这种情况下,条件编译语句块不影响函数体 ◆ 条件编译关键字语句顶格左对齐; ◆ 所含的函数体定义无需缩进,依旧按照单个函数体定义的排版方式进行。 (3)条件编译语句嵌套在函数体内 (主要在(.c)文件中) a)当条件编译语句块与被包语句所属的语句块之间没有逻辑路径交叉时,以下两种方式均可 ◆ 按照语句块嵌套方式进行缩进排版 (推荐); ◆ 条件编译语句不影响原先语句块排版,条件编译语句与所包含的关键字语句块左对齐 。 b)当条件编译语句块与被包语句所属的语句块之间存在逻辑路径交叉时 ◆ 条件编译语句顶格左对齐,其它语句按照正常顺序排版。 条件编译的形式如下所示(NNN、MMM等都是在某处已经定义为 1 或者 0 的): #if NNN statement1; #elif MMM statement2; #else statement3; #endif 条件编译指令将决定那些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。 1.#if指令 #if指令检测跟在制造另关键字后的常量表达式。如果表达式为真,则编译后面的代码,直到出现#else、#elif或#endif为止;否则就不编译。 2.#endif指令 #endif用于终止#if预处理指令。 #define DEBUG 0 main() { #if DEBUG printf("Debugging\n"); #endif printf("Running\n"); } 由于程序定义DEBUG宏代表0,所以#if条件为假,不编译后面的代码直到#endif,所以程序直接输出Running。 如果去掉#define语句,效果是一样的。 3.#ifdef和#ifndef #define DEBUG main() { #ifdef DEBUG printf("yes\n"); #endif #ifndef DEBUG printf("no\n"); #endif } #if defined等价于#ifdef; #if !defined等价于#ifndef 4.#else指令 #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。#endif指令将中指上面的条件块。 #define DEBUG main() { #ifdef DEBUG printf("Debugging\n"); #else printf("Not debugging\n"); #endif printf("Running\n"); } 5.#elif指令 #elif预处理指令综合了#else和#if指令的作用。 #define TWO main() { #ifdef ONE printf("1\n"); #elif defined TWO printf("2\n"); #else printf("3\n"); #endif } 程序很好理解,最后输出结果是2。 6.其他一些标准指令 #error指令将使编译器显示一条错误信息,然后停止编译。 #line指令可以改变编译器用来指出警告和错误信息的文件号和行号。 #pragma指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息

D. C语言编译器会编译改变过的代码,而不会编译没有改动的代码。 我想知道它是怎么判断程序是否有呗修改过的

编译器要记录你的编译生成文件,比如obj、exe等的生成日期,发现与相关的文件如.c源文件、obj等日期旧时则选择对此部分重新编译。
特别地,它记录所有相关文件,比如你新修改了某头文件.h,编译系统会逐一比较所有使用这个.h文件的编译结果,如果发现时间旧了就重新编译它们。

E. C++中Release版本和DEBUG版本编译选项差别的问题。

你是不是有变量没有初始化或者用了诸如i=i++ + ++i这种未定义行为!这两种情况必须考虑!尽量别去考虑debug和release的内存分配方式!

F. vivox6系统升级后版本信息里的编译时间怎么会变

编译时间是手机系统软件版本更新的时间,这是正常现象的,还请放心使用。

G. devc++为什么代码改变编译运行却没变

额……不是很懂题主的问题,是否可以详细说明
1,如果你修改的是注释的话,编译运行自然是不变
2,根据不同的代码,需要看你修改的是哪一部分,例如修改的是不需要用到的部分,运行结果也不会变

H. 如何设置编译选项 ubuntu

这个就要看你的具体的编译器了。例如:在 UBUNTU 系统下,使用的是 gcc C 语言编译器,那么就一定要遵循 gcc 的编译选项规定。例如:gcc myfile.c,该命令产生的是一个缺省的输出运行文件 a.out;gcc -o myrunfile myfile.c,该命令将会产生一个输出文件为 myrunfile 的运行文件;gcc -c myfile.c,该命令是只产生一个 myfile.o 的中间文件,只编译、不连接。除此之外,你还需要注意 makefile 文件的编写规则,因为该文件才是真正要把所有的源程序的编译选项按照一定的规则写到 makefile 文件中,然后再整体对源程序进行编译、连接。

I. 为什么有时编译选项要改成多线程才能编译通过,而 单线程就不行呢

主要是libc(C函数)库不同,有时链接时会看到libcd.lib/libc.lib/libcmt.lib...这些东东,就是针对不同的线程环境所使用的。不过在VS2005之后,不再使用单线程库了,它只使用libc*mt.lib,也就是有很多老程序代码在VS2005下找不到LIBCD.lib的原因。
如果你在程序中使用了_beginthread之类的函数,那么就会链接到多线程的c函数库,单线程选项当然不能使用了。
而使用FORCE:MUTIPLE和这个没有多大关系,它可能在同时使用了单线程库和多线程库时起到了忽略多个重叠符号错误的作用。

阅读全文

与编译选项什么时候会变相关的资料

热点内容
python字符串中符号 浏览:787
python正则表达式贪婪模式 浏览:648
爱国精神指的是什么app 浏览:408
寿司解压系列全集视频 浏览:913
物体三维重建算法 浏览:984
fuli直播app哪个好 浏览:918
租办公室用什么app 浏览:106
医师定期考核刷题app哪个好 浏览:338
导出dmp文件命令 浏览:288
手机百度网盘怎么解压密码文件 浏览:585
索引重新编译 浏览:606
命令与征服4免cd补丁完美版 浏览:428
kotlin编译为native 浏览:142
家用编译机 浏览:552
电子加密货币最新政策 浏览:382
androidcanvas撤销 浏览:272
安卓手机怎么把图标全部下移 浏览:188
饥荒被服务器踢出怎么进 浏览:173
c编译器哪款好 浏览:734
快手宝哥发明什么app 浏览:823