用PP视頻APP或微信扫一扫 二维码在手机上继续观看视频
用微信扫一扫上方二维码*** APP 或
为了适应现在越来越流行的64位系统经常需要将代码分别编译为32位版和64位版。其次除了需要生成debug版用于开发测试外,还需要生成release版用于发布本文介绍了如何利用makefile條件编译来生成这些版本,而且不仅兼容Linux下的GCC还支持MinGW、TDM-GCC等Windows下的GCC编译器。
为了测试条件编译的效果以下面这个C语言程序为例(gcc64_make.c)——
main函数中,前两条语句的含义为——
第一条语句用于显示当前程序的位数如果编译为32位版,将会显示“bits: 32”;如果编译为64位版将会顯示“bits: 64”。
第二条语句是一条断言需要argc变量大于1。如果编译为debug版若运行时未加命令参数,该断言失败于是输出错误信息并终止程序;如果编译为release版,所有断言被屏蔽不会有错误信息。
复习一下GCC命令行参数看看各个版本的区别——
32位版:加上 -m32 参数,生成32位的代碼
64位版:加上 -m64 参数,生成64位的代码
debug版:加上 -g 参数,生成调试信息
release版:加上 -static 参数,进行静态链接使程序不再依赖动态库。加上 -O3 参数进行最快速度优化。加上-DNDEBUG参数定义NDEBUG宏,屏蔽断言
当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码但某些编译器存在例外,例如——
32位Linux下的GCC默认是编译为32位代码。
64位Linux下的GCC默认是编译为64位代码。
Window系统下的MinGW总是编译为32位代码。因为MinGW只支持32位代码
该makefile的代码风格是精心设计的,可以很方便的扩展——
需要增加代码文件或依赖关系时修改“# files”之后的内容。
需要调整编译参数时修改前半部分的参数变量。
需要增加新的条件编译参数时在“# args”定义一个变量并赋初值,然后再在后面用“ifeq”判断变量来调整编译参數
装好MSYS,再配置一下PATH环境变量Windows中也可以使用rm命令删除文件。
因Windows下的可执行文件的扩展名是exe所以使用了addsuffix函数增加“.exe”扩展名。
因Linux下不會生成.exe可执行文件而Windows下不会生成无扩展名的可执行文件,导致rm会因找不到文件而报错这时可以加上-f参数忽略该错误。
打开终端使用cd命令进入程序所在目录,并执行以下命令——
打开命令提示符使用cd命令进入程序所在目录,并执行以下命令——
打开命令提示符使用cd命令进入程序所在目录,并执行以下命令——