STM32 C/C++ GCC Flags
STM32 C/C++ GCC Flags
参考:
编译器Flags
C/C++编译器前置Flags
-fdata-sections
- 这个编译器标志告诉 GCC 将每个数据段(例如全局变量和静态变量)放入其自己的段中。默认情况下,所有的数据都放在一个或几个数据段中。通过将每个数据项放入单独的段,链接器可以使用
--gc-sections选项来移除未引用的数据段,从而减少最终二进制文件的大小。
-ffunction-sections
- 类似于
-fdata-sections,这个标志将每个函数放入其自己的段中。这样,如果某个函数没有被程序引用,链接器可以移除包含该函数的整个段,节省空间。
-Wl,--gc-sections
- 这个链接器选项告诉链接器(通常是 GNU 链接器
ld)在生成最终的可执行文件或库文件时,移除未使用的段。这些未使用的段可能包含未被引用的函数、变量或其他数据。这个选项与-fdata-sections和-ffunction-sections结合使用,可以有效地减少二进制文件的大小,因为它允许链接器移除程序中未使用的部分。
C++ Specific Flags
-fno-rtti
- 禁用运行时类型识别(RTTI):这个标志禁用了 C++ 的运行时类型识别机制,这意味着程序在运行时无法使用
dynamic_cast和typeid操作。禁用 RTTI 可以减少程序的体积和提高性能,因为编译器不需要生成和处理类型信息。
-fno-exceptions
- 禁用异常处理:这个标志告诉编译器不要生成用于异常处理的代码。在 C++ 中,异常处理是一个强大的特性,但也会引入额外的代码和运行时开销,比如异常表的生成和堆栈展开逻辑。禁用异常处理可以减少程序的大小和提高性能,特别是在不需要异常处理的嵌入式系统或性能敏感的应用中。
-fno-threadsafe-statics
- 禁用线程安全静态初始化:在 C++ 中,如果一个静态局部变量在多个线程中被初始化,编译器默认会添加额外的代码来确保初始化的线程安全性,以避免所谓的 “静态初始化顺序问题”。这个标志禁用了这种线程安全的保护,可以减少一些运行时开销。但是,需要注意的是,如果你的程序在多线程环境中运行,并且确实需要线程安全初始化,那么禁用这个保护可能会导致不可预测的行为。
MakeFile To CMake
Essential things described in
CMakeLists.txtfile:
CMakeLists.txt文件中描述的基本内容:
- Toolchain information, such as GCC configuration with build flags
工具链信息,例如带有构建标志的 GCC 配置- Project name 项目名称
- Source files to build with compiler, C, C++ or Assembly files
使用编译器、C、C++ 或汇编文件构建的源文件- List of include paths for compiler to find functions, defines, ... (
-I)
编译器查找函数、定义等的包含路径列表(-I)- Linker script path 链接器脚本路径
- Compilation defines, or sometimes called preprocessor defines (
-D)
编译定义,有时称为预处理器定义(-D)- Cortex-Mxx and floating point settings for instruction set generation
用于指令集生成的 Cortex-Mxx 和浮点设置

浙公网安备 33010602011771号