gcc
gcc
王永旺1. GCC常用参数
gcc编译选项 | 选项的意义 |
---|---|
-E | 预处理指定的源文件,不进行编译 |
-S | 编译指定的源文件,但是不进行汇编 |
-c |
编译、汇编指定的源文件,但是不进行链接 |
-o [file1] [file2] / [file2] -o [file1] |
将文件 file2 编译成文件 file1 |
-I directory (大写的i) |
指定 include 包含文件的搜索目录 |
-g |
在编译的时候,生成调试信息,该程序可以被调试器调试 |
-D | 在程序编译的时候,指定一个宏 |
-w | 不生成任何警告信息, 不建议使用, 有些时候警告就是错误 |
-Wall | 生成所有警告信息 |
-On | n的取值范围:0~3。编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 |
-l |
在程序编译的时候,指定使用的库 |
-L |
指定编译的时候,搜索的库的路径。 |
-fPIC/fpic |
生成与位置无关的代码 |
-shared |
生成共享目标文件。通常用在建立共享库时 |
-std |
指定C方言,如:-std=c99,gcc默认的方言是GNU C |
2. 使用预处理器宏来控制代码的不同执行路径
通过在编译时定义宏,可以启用或禁用特定的代码块。
1 |
|
-D<MACRO>
是编译指令,用于定义宏。在这个例子中,-DFEATURE_A
定义了宏FEATURE_A
,使得与该宏相关的代码块被包含进来进行编译。#ifdef
和#else
是预处理器指令,用于检查宏是否被定义。#ifdef FEATURE_A
表示当FEATURE_A
被定义时,包含其后的代码块。#else
则表示如果FEATURE_A
未被定义时包含其后的代码块。#endif
用于结束条件编译语句。
通过这种方式,你可以在编译时灵活地控制哪些代码被编译和执行,适应不同的编译需求或配置环境。
评论
匿名评论隐私政策
TwikooWaline
✅ 你无需删除空行,直接评论以获取最佳展示效果