常见编译选项:
-c: 只编译源文件,生成目标文件。不进行链接操作,生成目标文件后还需要通过连接器将其与其他目标文件链接成可执行二进制文件。
-std=<标准>: 指定c++标准,例如-std=c++11表示使用c++11标准进行编译。默认情况下编译器会使用最新的c++标准。
-I <路径>: 添加头文件的搜索路径。
Worning相关:
-w: 用于关闭所有警告信息
-Wall: 表示开启所有警告信息
-Wextra: 表示开启额外的警告信息,与-Wall不同,该选项提供了更多的警告选项,包括了一些非常细微的问题。例如:未使用的变量,未定义的行为(例如使用未初始化的变量等)
-Werror: 将所有警号信息视为错误信息并停止编译过程,从而防止在代码中出现的潜在问题。
-Wno-ununsed-parameter: 取消未使用函数参数的警告信息
-Wno-uninitialized: 取消未初始化的警告信息
优化级别编译选项:
O1: 这是一个较低的优化级别,它启用了一些基本的代码优化技术,如删除未使用的变量、简化常量表达式、内联简短函数等。它可以提高程序的执行效率,但是保留了较多的调试信息和较小的代码体积,便于调试理解。
O2: 这是一个中等的优化级别,它启用了等多的代码优化技术,如函数内联、循环展开、常量传播等。它会产生更高效的代码,但也可能增加编译时间和生成代码的体积。
O3: 这是一个更高的优化级别,它可能使用更复杂的优化技术,如向量化、循环变量优化、函数分析等。它会产生更高效的代码,但更多的优化可能会增加编译时间并消耗更多的内存。
总结:一般而言,建议在开发过程中使用较低的优化级别(O1, O2),以便保留调试信息和可读性。在发布前进行性能优化时,可以尝试使用O3来生成更高效的代码。
链接相关:
-L <路径>: 添加库文件的搜索路径。
-l <库名>: 链接库文件。
-rapth=<路径>: 用于连接动态库,在程序运行时指定动态库的搜索路径(有时所需lib不在环境变量中又不想配置时,可以使用该选项来指定)。
-Wl, <参数>: 用于将后面的参数传递给链接器。