1. 编译可执行文件Makefile版本号标识:记录程序的不同版本,如libxxx_v1.0。编译器选择:Linux用gcc/g++,ARM用arm-linux-gcc。宏定义:根据需求添加宏条件,如-DDEBUG。编译选项:如-Wall和-O优化等级。源文件和头文件:指定依赖路径,使用wildcard遍历。库文件:静态库libxxx.a,动态库libxxx.so...
除了使用预编译头文件,我们还可以采用其他方法来提高代码的编译效率。比如,可以使用内联函数、宏定义等技术来减少函数调用的开销,从而提高代码的执行效率。此外,我们还可以使用编译器的优化选项来优化代码的执行效率。 移除不必要的依赖项 有些时候,由于Makefile中定义的依赖关系过于宽泛,导致不必要的文件被重新编译。这...
创建 G++ Makefile 文件遵循基本语法规则,涉及目标、依赖和配方。以下步骤详细介绍其创建过程。使用宏 在 Makefile 文件中使用宏定义变量,简化命令并减少重复性工作。宏定义使用 = 运算符,引用使用 $ 运算符。通过设置宏如 CXX 和 CXXFLAGS,控制编译器版本和标记,支持项目结构。加速 G++ Makefile ...
Makefile支持变量的使用,类似于C语言中的宏定义。变量可以用于存储文件名、编译选项等,使得Makefile更易于维护。 Makefile中的变量可以根据其来源和用途分为以下几类: 环境变量:执行Makefile时从外部传入Make命令的环境变量。例如,`PWD 表示当前目录的绝对路径。环境变量通常是全局的,并且可以在整个Makefile中引用。 内...
优化2:引入变量 这里引入变量的意思有点像使用宏替换,改成(变量名),是格式:TARGET = main OBJS =...
程序版本号:非刚需,但却是具有代码版本管理和产品迭代意识的开发者都会遵循的规则, 其表现形式通常是:将一个随着每次代码提交而变动的数字或散列码定义成宏, 在编译期传递给编译器,进而固化到目标程序里,供用户在必要的时候查询。 版本号的生成逻辑详见懒编程秘笈项目 的makefile/__ver__.mk文件。
宏定义, #define 展开宏定义 条件编译, 如:“#if” “#ifdef” “#else” “#elif” “#endif”等 文件包含 #include,将被包含的文件插入到该预编译指令的位置 还有一些删除注释、添加行号和文件名标识等也是在预处理这一步完成的。 step2: 编译: ...
优化后的程序可能比未优化的程序要小,执行速度也可能有所提高。 -shared:在编译动态库时会用到这个参数。 -D:用于定义宏。例如,使用-DDEBUG可以在编译时定义DEBUG宏。 -g:生成带有调试信息的可执行文件,用于调试目的。 五、makefile内置函数 $(subst from,to,text) 文本替换,from: 将要被替换的子文本,to: ...
ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND) //这个是最后要生成的文件。$(U_BOOT_NAND) $(U_BOOT_ONENAND) 要添加相应的宏定义即可。 $(obj)u-boot.hex: $(obj)u-boot
#系统宏定义 C_DEFS := \ -DUSE_HAL_DRIVER \ -DSTM32F429xx # 芯片型号,用于Jlink仿真调试、下载 CHIP := STM32F429IG # 选择优化等级: #1. gcc中指定优化级别的参数有:-O0、-O1、-O2、-O3、-Og、-Os、-Ofast。 #2. 在编译时,如果没有指定上面的任何优化参数,则默认为 -O0,即没有优化。