Linux编译器(如GCC)的常用参数和选项非常丰富,以下是一些常用的例子:
-c
:仅编译源文件,不进行链接。-S
:生成汇编代码文件。-E
:仅进行预处理,不进行编译和链接。-o
:指定输出文件的名称。例如,gcc -o output_file source_file.c
会将 source_file.c
编译为名为 output_file
的可执行文件。-g
:生成调试信息,以便使用调试器(如GDB)进行调试。这对于查找和修复代码中的错误非常有帮助。-O
:进行优化。-O1
、-O2
和 -O3
分别表示不同的优化级别,级别越高,优化程度越大。请注意,高优化级别可能会增加编译时间。-Wall
:显示所有警告信息。这有助于发现代码中的潜在问题。-Werror
:将警告视为错误。这意味着如果在编译过程中遇到任何警告,编译都会失败。-ansi
或 -std=c99
等:指定编译器应遵循的C语言标准。例如,-ansi
遵循C90标准,而 -std=c99
遵循C99标准。-I
:指定头文件的搜索路径。这允许编译器在指定的目录中查找头文件。-L
:指定库文件的搜索路径。这允许编译器在指定的目录中查找库文件。-l
:链接指定的库。例如,-lm
链接数学库。请注意,库名称不应包含前缀 lib
和后缀 .a
或 .so
。-pthread
:链接POSIX线程库。这对于编写多线程程序非常有用。-D
:定义宏。例如,-DFOO=bar
定义了一个名为 FOO
的宏,其值为 bar
。-U
:取消定义宏。例如,-UFOO
取消了名为 FOO
的宏的定义。-fPIC
或 -fpic
:生成位置无关代码(PIC)。这对于在共享库中编译代码非常有用,因为PIC代码可以在内存中的任何位置加载和执行,而无需进行重定位。-shared
:生成共享库文件。这与 -fPIC
或 -fpic
一起使用,以创建可在多个程序之间共享的库文件。-static
:生成静态库文件。这意味着库中的所有代码都将被包含在最终的可执行文件中,而不是在运行时链接到库文件。-fexceptions
:启用C++异常处理。-fnon-call-exceptions
:禁用C++异常处理。-Wno-unknown-pragmas
:忽略未知的编译器指令警告。-Wstrict-prototypes
:严格检查函数原型。-Wno-parentheses
:忽略不必要的括号警告。-Wno-return-type
:忽略返回类型警告。-Wno-sign-compare
:忽略符号比较警告。-Wno-uninitialized
:忽略未初始化的变量警告。-Wno-unknown-condition
:忽略未知的条件警告。-Wno-unused-value
:忽略未使用的值警告。-Wno-unused-variable
:忽略未使用的变量警告。-Wno-unused-function
:忽略未使用的函数警告。-Wno-overloaded-virtual
:忽略过载的虚函数警告。-Wno-shadow
:忽略变量遮蔽警告。-Wno-switch-enum
:忽略枚举值在switch语句中的警告。-Wno-trigraphs
:忽略三元运算符警告。-Wno-unknown-escape
:忽略未知的转义序列警告。-Wno-missing-field-initializers
:忽略结构体字段初始化警告。-Wno-missing-braces
:忽略缺少大括号的警告。-Wno-extra-semi
:忽略额外的分号警告。-Wno-parentheses-equality
:忽略括号内表达式相等的警告。-Wno-constant-condition
:忽略恒定条件的警告。-Wno-integral-constant-expression
:忽略整数常量表达式的警告。-Wno-missing-include-dirs
:忽略缺少包含目录的警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 noexcept
类型的警告。-Wno-noexcept-operator
:忽略 noexcept
操作符的警告。-Wno-constexpr-not-const
:忽略 constexpr
函数不是 const
的警告。-Wno-array-bounds
:忽略数组越界访问的警告。-Wno-pointer-to-int-cast
:忽略指针到整数类型转换的警告。-Wno-int-to-pointer-cast
:忽略整数到指针类型转换的警告。-Wno-pointer-compare
:忽略指针比较的警告。-Wno-pointer-to-bool-cast
:忽略指针到布尔类型转换的警告。-Wno-bool-to-pointer-cast
:忽略布尔到指针类型转换的警告。-Wno-return-type-conversion
:忽略返回类型转换的警告。-Wno-argument-type-conversion
:忽略参数类型转换的警告。-Wno-float-conversion
:忽略浮点类型转换的警告。-Wno-complex-conversion
:忽略复数类型转换的警告。-Wno-cast-qual
:忽略类型转换中的限定符警告。-Wno-strict-aliasing
:忽略严格别名警告。-Wno-non-virtual-dtor
:忽略非虚析构函数的警告。-Wno-vla
:忽略变量长度数组的警告。-Wno-long-long
:忽略 long long
类型使用的警告。-Wno-noexcept-type
:忽略 `no