C++ kdevelop基本概念解析
C++編程語言中有很多內(nèi)容時(shí)比較高深的,即便是我們經(jīng)常使用的一些功能,其中也有很多東西值得我們?nèi)ド钊氲难芯俊T谶@里我們將會(huì)為大家詳細(xì)介紹一下有關(guān)C++ kdevelop的相關(guān)內(nèi)容,讓大家體驗(yàn)一下其中的特點(diǎn)。#t#
用C++ kdevelop進(jìn)行交叉編譯的方法。
首先提一下,我這篇文章,對(duì)于那些喜歡使用繁瑣開發(fā)工具的達(dá)人們可以無視。
嵌入式的linux開發(fā)中,要建立的項(xiàng)目通常是三種,一是C或C++的工程。二是QT/E的工程,三是內(nèi)核驅(qū)動(dòng)模塊工程。管理三種工程,網(wǎng)上流傳的方法大多是用autotool或qmake工具生成MAKEFILE,這兩種工具使 用極其繁瑣,尤其是autotool工具集,還是一“集”,其中,還要手工修改一些文件,其繁瑣讓人望而卻步。而內(nèi)核模塊的MAKEFILE則更是要手工編輯才行了,在實(shí)際工作中,用上述進(jìn)行工程管理,頻頻出錯(cuò),嚴(yán)重影響工作效率。而linux的許多發(fā)行版中都已集成了C++ kdevelop這個(gè)IDE,其可以對(duì)工程進(jìn)行很好的管理,而且它的編輯器又自帶有代碼縮進(jìn),代碼補(bǔ)全等功能,十分好用。但是許多嵌入式工程師因?yàn)椴恢绾?/p>
使用kdevelop進(jìn)行嵌入式開發(fā)所需的交叉編譯,而放棄了它,實(shí)在可惜。我在實(shí)際工作中,也先是使用了上述的方法,苦不堪言,而后才模出了在kdevelop3中進(jìn)行交叉編譯的方法,工作效率明顯提升。
我用的是Fedroa6的linux發(fā)行版,其自帶kdevelop3和QT3的開發(fā)環(huán)境。下面的講述都是在這個(gè)系統(tǒng)中實(shí)際可行的。在其它系統(tǒng)中應(yīng)該也是這樣的。
我們用來開發(fā)ARM嵌入式系統(tǒng)時(shí),常用到三種工程模板,第一種是C的簡(jiǎn)單的hello模板,C++的簡(jiǎn)單的hello工程模板。兩個(gè)模板都是kdevelop調(diào)用autotool工具集進(jìn)行工程管理的。關(guān)于這個(gè)工具集,網(wǎng)上有很多資料,就不多說了。第二種是QMAKE工程模板,它是調(diào)用QT的QMAKE工具來進(jìn)行工程管理的。第三種,就是linux內(nèi)核模塊工程模板,它由kdevelop自身來管理。下面,我就具體講述一下如何在這種工程模板中進(jìn)行交叉編譯。
第一種:kdevelop調(diào)用autotool工具集進(jìn)行工程管理,它要進(jìn)行交叉編譯的設(shè)置是最簡(jiǎn)單的。只需在C++ kdevelop的工程->工程選項(xiàng)的對(duì)話框中打開配置選項(xiàng)欄作如下設(shè)置,在常規(guī)欄中,在“配置參數(shù)”中添加一項(xiàng)“--host=arm-linux”,在CPPFLAGS中,加入“-I/usr/local/arm/3.4.1/arm-linux/include”(這是我用的交叉編譯器,你要設(shè)成你的,以下同),在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++”。好了,選擇構(gòu)建->構(gòu)建工程,交叉編譯成功。這種模板的設(shè)置是最簡(jiǎn)單的,設(shè)置后不用做任何處理,即可編譯成功。(這是最簡(jiǎn)單的,卻是我最后才摸出來的,費(fèi)了很多時(shí)間。主要是卡在配置參數(shù)中沒有加入host=arm-linux,查了很多資料,才解決問題。)
第二種:kdevelop是調(diào)用QMAKE進(jìn)行工程管理的。設(shè)置到是容易的。就是在工程選項(xiàng)的MAKE選項(xiàng)中,添加四個(gè)環(huán)境變量。分別是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庫(kù)所在目錄。好了,設(shè)置完了,但如果你之前曾經(jīng)對(duì)工程編譯過(在開發(fā)嵌入式QTE時(shí),這是常有的情況,主要是為了測(cè)試一下界面的正確性),你這時(shí)再構(gòu)建工程,就會(huì)報(bào)錯(cuò),你要選擇清理工程,還要?jiǎng)h除工程所在目錄下所有的makefile文件,然后再構(gòu)建工程就會(huì)成功。
第三種:C++ kdevelop是自身在管理此工程的。沒有什么可以設(shè)置的地方,要想它交叉編譯,只有直接修改makefile文件了。打開makefile文件,將其中的KDIR = /lib/modules/$(CURRENT)/build更改為KDIR =/root/utu-linux_V1.5.3 (這是我的內(nèi)核樹所在目錄。也就是交叉編譯在開發(fā)板上使用的linux的那個(gè)目錄),保存。好了,選擇“構(gòu)建工程”,交叉編譯成功。如果報(bào)錯(cuò),則先選擇“清理工程”即可。簽于kdevelop管理此項(xiàng)工程時(shí)不是很理想,比如,無法進(jìn)行多文件的驅(qū)動(dòng)編譯。建議用網(wǎng)上提供的makefile模板修改后直接替換原來的makefile??荚?大提示把模板附在下面。
- ifeq ($(KERNELRELEASE),)
- KERNELDIR ?= /root/utu-linux_V1.5.3
- PWD := $(shell pwd)
- modules:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
- modules_install:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
- clean:
- rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
- PHONY: modules modules_install clean
- else
- obj-m := xray.o
- xray-objs :=xray-driver.o hwdriver.o
- endif
好了,到此,你基本就可以完全在C++ kdevelop下進(jìn)行嵌入式的開發(fā)和交叉編譯了,怎么樣,是不是覺得工作 效率大大提高了呢。