C kdevelop基本概念解析
创始人
2024-06-22 20:41:46
0

C++编程语言中有很多内容时比较高深的,即便是我们经常使用的一些功能,其中也有很多东西值得我们去深入的研究。在这里我们将会为大家详细介绍一下有关C++ kdevelop的相关内容,让大家体验一下其中的特点。#t#

用C++ kdevelop进行交叉编译的方法。

首先提一下,我这篇文章,对于那些喜欢使用繁琐开发工具的达人们可以无视。

嵌入式的linux开发中,要建立的项目通常是三种,一是C或C++的工程。二是QT/E的工程,三是内核驱动模块工程。管理三种工程,网上流传的方法大多是用autotool或qmake工具生成MAKEFILE,这两种工具使 用极其繁琐,尤其是autotool工具集,还是一“集”,其中,还要手工修改一些文件,其繁琐让人望而却步。而内核模块的MAKEFILE则更是要手工编辑才行了,在实际工作中,用上述进行工程管理,频频出错,严重影响工作效率。而linux的许多发行版中都已集成了C++ kdevelop这个IDE,其可以对工程进行很好的管理,而且它的编辑器又自带有代码缩进,代码补全等功能,十分好用。但是许多嵌入式工程师因为不知如何

使用kdevelop进行嵌入式开发所需的交叉编译,而放弃了它,实在可惜。我在实际工作中,也先是使用了上述的方法,苦不堪言,而后才模出了在kdevelop3中进行交叉编译的方法,工作效率明显提升。

我用的是Fedroa6的linux发行版,其自带kdevelop3和QT3的开发环境。下面的讲述都是在这个系统中实际可行的。在其它系统中应该也是这样的。

我们用来开发ARM嵌入式系统时,常用到三种工程模板,第一种是C的简单的hello模板,C++的简单的hello工程模板。两个模板都是kdevelop调用autotool工具集进行工程管理的。关于这个工具集,网上有很多资料,就不多说了。第二种是QMAKE工程模板,它是调用QT的QMAKE工具来进行工程管理的。第三种,就是linux内核模块工程模板,它由kdevelop自身来管理。下面,我就具体讲述一下如何在这种工程模板中进行交叉编译。

第一种:kdevelop调用autotool工具集进行工程管理,它要进行交叉编译的设置是最简单的。只需在C++ kdevelop的工程->工程选项的对话框中打开配置选项栏作如下设置,在常规栏中,在“配置参数”中添加一项“--host=arm-linux”,在CPPFLAGS中,加入“-I/usr/local/arm/3.4.1/arm-linux/include”(这是我用的交叉编译器,你要设成你的,以下同),在LDFLAGS栏中,输入“-L/usr/local/arm/3.4.1/arm-linux/lib”,在C栏中,CC中加入“/usr/local/arm/3.4.1/bin/arm-linux-gcc”,在CPP栏中,CXX中加入“/usr/local/arm/3.4.1/bin/arm-linux-g++”。好了,选择构建->构建工程,交叉编译成功。这种模板的设置是最简单的,设置后不用做任何处理,即可编译成功。(这是最简单的,却是我最后才摸出来的,费了很多时间。主要是卡在配置参数中没有加入host=arm-linux,查了很多资料,才解决问题。)

第二种:kdevelop是调用QMAKE进行工程管理的。设置到是容易的。就是在工程选项的MAKE选项中,添加四个环境变量。分别是QMAKESPEC,值为“/opt/qt-3.3.4-target/mkspecs/qws/linux-arm-g++”,QTDIR,值为“/opt/qt-3.3.4-target”,QTINC,值为“/opt/qt-3.3.4-target/include”,QTLIB,值为“/opt/qt-3.3.4-target/include”,其中/opt/qt-3.3.4-target,是我的交叉编译的QT/E库所在目录。好了,设置完了,但如果你之前曾经对工程编译过(在开发嵌入式QTE时,这是常有的情况,主要是为了测试一下界面的正确性),你这时再构建工程,就会报错,你要选择清理工程,还要删除工程所在目录下所有的makefile文件,然后再构建工程就会成功。

第三种:C++ kdevelop是自身在管理此工程的。没有什么可以设置的地方,要想它交叉编译,只有直接修改makefile文件了。打开makefile文件,将其中的KDIR = /lib/modules/$(CURRENT)/build更改为KDIR =/root/utu-linux_V1.5.3 (这是我的内核树所在目录。也就是交叉编译在开发板上使用的linux的那个目录),保存。好了,选择“构建工程”,交叉编译成功。如果报错,则先选择“清理工程”即可。签于kdevelop管理此项工程时不是很理想,比如,无法进行多文件的驱动编译。建议用网上提供的makefile模板修改后直接替换原来的makefile。考试,大提示把模板附在下面。

  1. ifeq ($(KERNELRELEASE),)  
  2. KERNELDIR ?= /root/utu-linux_V1.5.3  
  3. PWD := $(shell pwd)  
  4. modules:  
  5. $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  
  6. modules_install:  
  7. $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install  
  8. clean:  
  9. rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions  
  10. PHONY: modules modules_install clean  
  11. else  
  12. obj-m := xray.o  
  13. xray-objs :=xray-driver.o hwdriver.o  
  14. endif 

好了,到此,你基本就可以完全在C++ kdevelop下进行嵌入式的开发和交叉编译了,怎么样,是不是觉得工作 效率大大提高了呢。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...