使用Makefile终端参数实现跨平台编译控制
2017-08-07 20:24
274 查看
最近做的项目经常需要在x86和arm两个平台上测试,需要使用两套编译器,一套系统自带,一套来自于交叉编译环境。这时就需要为两个平台分别编写Makefile,但颇为不便。查阅资料后得知可以使用make configure调整编译选项,又显牛刀杀鸡。
一种较为简便的方式是在使用make指令时,添加额外参数以改变脚本中某变量的值,配合Makefile中的条件语句ifeq来控制编译过程。
编译时,若需编译arm平台程序,使用命令
需要注意的是,第二行的ifeq和括号之间必须有一个空格。否则,make会报错:
网上绝大多数解答都是将TAB误写为空格,而此处错误实为缺少空格。不得不说Makefile这个解释性语言很让人恼火,语法严苛,错误提示又不清晰。
一种较为简便的方式是在使用make指令时,添加额外参数以改变脚本中某变量的值,配合Makefile中的条件语句ifeq来控制编译过程。
CFLAGS+=-Werror -O2 ifeq ($(arm),true) CXX=arm-hisiv300-linux-uclibcgnueabi-g++ CC=arm-hisiv300-linux-uclibcgnueabi-gcc TARGETNAME=sockcli_arm else CXX=g++ CC=gcc TARGETNAME=sockcli endif $(TARGETNAME):main.o send_proc.o recv_proc.o main_proc.o $(CXX) $(CFLAGS) -o $(TARGETNAME) main.o send_proc.o recv_proc.o main_proc.o main.o:main.cpp send_proc.h recv_proc.h main_proc.h $(CXX) $(CFLAGS) -c main.cpp main_proc.o:main_proc.cpp main_proc.h send_proc.h recv_proc.h $(CXX) $(CFLAGS) -c main_proc.cpp send_proc.o:send_proc.cpp send_proc.h $(CXX) $(CFLAGS) -c send_proc.cpp recv_proc.o:recv_proc.cpp recv_proc.h $(CXX) $(CFLAGS) -c recv_proc.cpp clean: rm -f $(TARGETNAME) main.o main_proc.o recv_proc.o send_proc.o
编译时,若需编译arm平台程序,使用命令
make arm=true即可调用交叉编译器;若编译x86平台程序,直接使用
make命令即可。
需要注意的是,第二行的ifeq和括号之间必须有一个空格。否则,make会报错:
Makefile:2: *** 遗漏分隔符 。 停止。
网上绝大多数解答都是将TAB误写为空格,而此处错误实为缺少空格。不得不说Makefile这个解释性语言很让人恼火,语法严苛,错误提示又不清晰。
相关文章推荐
- python文件编译成so介绍 - 2.使用makefile将py文件编译成so文件并制作成rpm包,实现自动化
- Makefile中使用 for 控制结构编译多个目标文件
- nasm : 使用带参数的宏实现逻辑控制
- 使用spring aop实现URL地址参数权限控制
- (跨平台)cocos2d-x C++ or Object-C(前端)调用C# webservices(后台),实现交叉编译到Android/IOS/WinPhone等移动终端设备
- Windows平台下golang使用LiteIDE实现跨平台编译
- C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项
- 使用模板实现编译期间多态(类名当参数)
- 学习在linux和windows安装GSL和使用,编译 链接 和makefile的撰写和实现
- ADSI使用ASP来实现通用的对数据库控制编程
- 继续C++:gcc编译、连接和makefile的使用
- 初探vcIDE背后的秘密-为vc项目写makefile,实现自动独立编译
- 可变参数的使用(C++和C#实现)
- FleaPHP 开发指南 - 8. 如何使用 RBAC 组件实现访问控制
- 使用remoting远程控制编译机
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数
- 问题的提出:如何在Windows上通过终端程序实现Unix平台的前台编译?
- windows下使用makefile编译C语言.doc
- .Net中VSS实现版本控制管理的一些使用方法
- .Net中VSS实现版本控制管理的一些使用方法