第5讲Ubuntu下编程
学会在win10的ubuntu子系统下编译micropython

学会在win10的ubuntu子系统下编译micropython在Win10的应用商店中,提供了Linux的子系统,这是实际上是一个虚拟机软件,与virtualbox和vmplayer功能类似。
下面就介绍在Linux子系统中安装工具链和编译micropython的方法。
先确认一下Windows10系统的版本,如果是LTSB版(Long Time Service Branch 企业长期服务版),就需要更换到企业版,LTSB版是不能运行Linux子系统的。
如果还没有安装过Linux子系统功能,首先需要在控制面板的“程序和功能”中允许适用于Linux的Windows子系统功能,并重新启动计算机。
然后就可以在应用商店中,通过搜索Linux或者ubuntu,找到ubuntu应用。
注意现在应用商店里ubuntu有两个版本,分别是16.04和18.04。
这两个版本都是长期服务器版,但是我们需要选择第一个,也就是16.04版本,因为目前gcc-arm编译器还没有支持18.04,使用18.04版本就需要自己手工安装编译器,比较麻烦。
安装好ubuntu 16.04后,运行就会出现下面的控制台样式窗口,它默认是只有控制台(shell)界面,没有图形化界面。
我们可以通过 lsb_release -a 命令查看系统版本。
这个新安装的ubuntu可以看成是一个全新的系统,大部分软件都需要自己安装。
我们先安装arm-gcc编译器,同时可以更新一下软件仓库的内容。
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppasudo apt updatesudo apt install gcc-arm-embedded然后安装git软件:sudo apt install git还需要安装gcc编译器和make软件:sudo apt install gcc make到这一步,需要的软件基本安装完成,下面是用git 同步下载micropython 源码。
ubuntu系统搭建JAVA环境教程

Ubuntu系统搭建JAVA环境教程Ubuntu12.04下手动安装JDK在ubuntu下可以通过多种方式来安装jdk,如使用Adept/新立得软件管理器在其中分别搜索"sun-java6-jre"和"sun- java6-jdk"并标记安装、通过apt-get命令来安装(sudo apt-get install sun-java6-jre、sudo apt-get install sun-java6-jdk)、同样也可以通过从java 官网上下载jdk安装文件进行手动安装(我下载的文件是:jdk-6u20-linux-i586.bin),这也正是本文所要讲述的一种安装方法。
从官网下载下来的安装文件(如:jdk-6u20-linux-i586.bin)默认都是没有执行权限的,可以通过$ls -l 命令查询到相关信息,所以首先第一步是要将安装文件赋予可执行权限,可以通过命令$ sudo chmod u+x /usr/lib/jvm/jdk-6u20-linux-i586.bin 来实现。
成功修改安装文件权限后,通过命令$ cd /usr/lib/jvm/ 进入安装文件所在目录,然后执行命令$./jdk-6u20-linux-i586.bin 屏幕将会出现jdk安装的相关信息,然后一路回车,直至屏幕显示要求输入yes/no,此时输入y并回车,当前目录下将会多出一个jdk1.6.0_20的目录,这也意味jdk已成功安装。
成功安装完JDK后,接下来我们将要进行JDK的配置,使用命$ sudo gedit /etc/environment对environment文件进行修改并添加以下代码:1.PATH="/usr/lib/java/jdk1.6.0_20/bin"2.CLASSPATH="/usr/lib/java/jdk1.6.0_20/lib"3.JAVA_HOME="/usr/lib/java/jdk1.6.0_20"若PATH已存在,则用冒号作间隔,将jdk的bin目录地址加上,这样java的环境变量将配置成功了,但这样默认使用的JDK可能还不是我们刚才安装的,因为ubuntu可能还会有默认的jdk,如openjdk;所以,为了使默认使用的是我们安装的jdk,还需执行如下命令:1.$ sudo update-alternatives --install /usr/bin/java java /usr/lib/java/jdk1.6.0_20/bin/java3002.3.$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/java/jdk1.6.0_20/bin/javac 3004.5.$ sudo update-alternatives --config java成功执行命令后,我们安装的JDK就是系统默认的了,执行命令$ java -version就可以成功看到JDK的相关信息了如:1.java version "1.6.0_20"2.Java(TM) SE Runtime Environment (build 1.6.0_20-b02)3.Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)下面的安装不是andrid运行所需要的java2013-01-15 19:08 人气:307ubuntu系统怎么样安装JAVA环境的方法其实很简单,Ctrl+Alt+T打开终端输入两三次命令就可以成功安装JAVA了,还可以选择JAVA的安装版本。
Ubuntu完全教程,让你成为Ubuntu高手!

Ubnuntu完全教程Ubuntu的发音Ubuntu,源于非洲祖鲁人和科萨人的语言,发作oo-boon-too 的音。
了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:)大多数的美国人读ubuntu 时,将u 作为元音发音,类似单词who 或者boo ,重音在第二个音节即u'buntu ,oo-boon-too 。
如果您喜欢撒哈拉,喜欢它令人窒息的温柔、梦幻般的寂寥还有张扬恣肆的旷远,您大可在第一个u,后面带些嗡嗡声:oom-boon-too。
Ubuntu的中文发音大约为:乌班图Ubuntu的涵义Ubuntu这个单词源自非洲,意谓“班图精神”────谁都不是一座孤岛,自成一体。
每个人都包孕于人类,因他人存在而存在,因他人幸福而幸福。
Ubuntu当前版本Ubuntu Linux v6.06 LTS (Dapper Drake)LTS:Long Term SupportDapper Drake:当前版本的开发代号Ubuntu的特点Ubuntu 完全基于Linux 操作系统,可以免费得到社区及专业机构的支持。
庞大的社区是它成长的沃土,请向这片动人的热忱敞开心扉。
Ubuntu 社区恪守Ubuntu 理念:自由!软件应是自由的,应尊重人类的自由意志,它与人类之间不应有任何隔膜。
本地语种,功能限制,自主改进的权利……都不应成为使用的障碍或负担。
自由,让Ubuntu 与传统的私有软件从根本上不同: 免费不能用来遮羞,您有权修正它,直到满意为止。
Ubuntu 适合桌面和服务器。
当前Ubuntu 发布版支持PC (Intel x86), 64-bit PC (AMD64) 和PowerPC (Apple iBook 和Powerbook, G4 和G5) 架构。
Ubuntu 包涵了超过16,000 种软件,核心的桌面系统却只有一张光盘,Ubuntu 覆盖了所有的桌面应用程序,从文字处理,电子表格到web 服务器和开发设计环境一应俱全。
ubuntu下编译驱动程序的准备

ubuntu下编译驱动程序的准备ubuntu不带linux内核源码,需要自己下载安装。
1,查看自己的内核版本uname -r2,查看源内的内核源码类表apt-cache search linux-source3,下载安装内核源代码sudo apt-get install linux-source- //我选的是这一个,自己看着办吧4,等待........下载完成后,在/usr/src下会有一个文件名为linux-source-5,解压缩包tar jxvf linux-source- //看清自己的版本解压后会生成一个源代码目录/usr/src/linux-source-6,进入源码目录后,配置文件make oldconfig7,生成内核make8,疯狂等待,大约1个多小时9,编译模块make modules10,安装模块make modules_install大功告成!^_^下面说一下Makefile文件$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install #PWD当前工作目录的变量obj-m := hello.o#hello.o是你要生成的驱动,以后可以自己改KERNELDIR:=/lib/modules/#这里别抄,写成你自己的版本,这个目录执行了内核源码目录PWD:=$(shell pwd) #将当前工作目录赋值该PWD modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesmodules_install:下面是一个经典的Hello,world!例子自己make一下就行了。
#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){printk(KERN_ALERT "Hello, world!\n");return 0;}static void hello_exit(void){printk(KERN_ALERT"Goodbye, cruel world!\n");}module_init(hello_init);module_exit(hello_exit);本文是参考了网上多篇帖子而写的算不上什么原创。
ubuntu教程

-f (忽略)
-m 只更改修改时间
-r, --reference=文件 使用指定<文件>的时间属性而非当前时间
-t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 格式的时间而非当前时间
再继续使用
rename foo foo0 foo??
则文件夹中的foo01到foo99的所有文件都被重命名为foo001到foo099,而foo100及其以后的文件名都不变,因为通配符?的使用,所以只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
如果再继续使用
rename foo foo0 foo*
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi编辑器是linux和unix都广泛支持的一种编辑器,是用vi可以很方便的生成、修改、查看文件,作为linux的爱好者vi应该也算是必学的东西,考虑到redhat太大我这里就选择了ubuntu来学习
1.ubuntu上的vi编辑器
默认情况下ubuntu上也安装有vi但是奇怪的是这个vi是vim-common版本,基本上用不了所以要先把这个版本的vi卸载掉才可以,卸载命令是
--time=WORD 使用 WORD 指定的时间:access、atime、use 都等于 -a
选项的效果,而 modify、mtime 等于 -m 选项的效果
Ubuntu详解及使用教程

Linux系统简介=============路径====路径分为绝对路径和相对路径。
绝对路径的起始点为根目录**/** ,例如``/usr/local/bin`` 就是绝对路径,它指向系统中一个绝对的位置,不受其它因素影响。
相对路径的起始点为当前目录,如果您现在位于``/usr`` 目录,那么相对路径``local/bin`` 所指示的位置为``/usr/local/bin``也就是说,相对路径所指示的位置,除了相对路径本身,还受到当前位置的影响。
例如Linux 系统中常见的目录``/bin`` 、``/usr/bin`` 、``/usr/local/bin`` ,如果只有一个相对路径``bin``\ ,那么它指示的位置可能上面三个目录中的任意一个,也可能是其它目录。
如果我告诉您到``bin`` 目录寻找一个文件,您可能搞不清楚是哪一个``bin`` 目录。
只有当前位置确定,相对路径指示的位置才能够确定。
现在我说,``/usr/local`` 目录下,它的相对路径``bin`` 中有某个文件,这样就比较明确了。
在相对路径中**.** 表示当前目录,**..** 表示当前目录的上一级目录。
假设您安装了一个程序,它的主程序没有被放置到上面三个``bin`` 目录中的任何一个,或者其它系统能够找到的地方,您就得告诉系统,它的可执行文件在哪里。
可以使用绝对路径,例如:``/home/user/bin/可执行文件``或者定位到``/home/user/bin`` 目录,使用相对目录来定位它``./可执行文件``如果您定位到了它的子目录,比如``/home/user/bin/gui``\ ,您可以使用**..** 来表示它的上级目录``../可执行文件``路径相关命令::cd (change directory) 更改目录。
pwd (print working directory)显示当前路径。
ls (list) 显示当前目录中的文件列表。
Ubuntu详解及使用教程
Linux系统简介=============路径====路径分为绝对路径和相对路径。
绝对路径的起始点为根目录**/** ,例如``/usr/local/bin`` 就是绝对路径,它指向系统中一个绝对的位置,不受其它因素影响。
相对路径的起始点为当前目录,如果您现在位于``/usr`` 目录,那么相对路径``local/bin`` 所指示的位置为``/usr/local/bin``也就是说,相对路径所指示的位置,除了相对路径本身,还受到当前位置的影响。
例如Linux系统中常见的目录``/bin`` 、``/usr/bin`` 、``/usr/local/bin`` ,如果只有一个相对路径``bin``\ ,那么它指示的位置可能上面三个目录中的任意一个,也可能是其它目录。
如果我告诉您到``bin`` 目录寻找一个文件,您可能搞不清楚是哪一个``bin`` 目录。
只有当前位置确定,相对路径指示的位置才能够确定。
现在我说,``/usr/local`` 目录下,它的相对路径``bin`` 中有某个文件,这样就比较明确了。
在相对路径中**.** 表示当前目录,**..** 表示当前目录的上一级目录。
假设您安装了一个程序,它的主程序没有被放置到上面三个``bin`` 目录中的任何一个,或者其它系统能够找到的地方,您就得告诉系统,它的可执行文件在哪里。
可以使用绝对路径,例如:``/home/user/bin/可执行文件``或者定位到``/home/user/bin`` 目录,使用相对目录来定位它``./可执行文件``如果您定位到了它的子目录,比如``/home/user/bin/gui``\ ,您可以使用**..** 来表示它的上级目录``../可执行文件``路径相关命令::cd (change directory) 更改目录。
pwd (print working directory)显示当前路径。
ls (list) 显示当前目录中的文件列表。
codeblocks起步--5
ubuntu下codeblocks起步-鼠标响应鼠标是计算机的一个主要输入设备,那么一个C::B程序怎样才能接受鼠标的响应呢?下面的这个工程就简单地介绍了一下鼠标响应事件,第二个程序(双击事件)的原理类似于游戏中控制物体移动的方法,即通过计算物体的下一位置来重绘物体或窗体。
新建wxWidgets工程。
选择2.8.0版本的wxWidgets。
给工程命名为MouClick,保存工程。
wxWidgets project选项卡中分别选用“wxSmith”和“Frame based”项,创建frame工程。
其他几项默认:首先编译一下我们创建的frame工程,你会看到下面的对话框。
这是一个编译器为我们创建的默认的frame工程。
鼠标单击事件:这个响应事件的添加类似于vc,很简单。
选中主窗体,在右下角的event事件选项卡中找到左键单击选项(EVT_LEFT_DOWN),为主窗体添加左键单击事件OnLeftDown(注:其他响应事件的添加也类似)。
在void MouClickFrame::OnLeftDown(wxMouseEvent& event)函数中添加如下一行代码:wxMessageBox(_T("Hi,你单击了一下窗体!"), _("left click"));就是在单击时弹出一个对话框,编译运行。
双技鼠标事件:为主窗体添加鼠标左键双击事件(EVT_LEFT_DCLICK):OnLeftDClick。
好,现在开始我们的第二个程序:为mouClickFrame类(在MouClickMain.h中,-_-!!这个好像不用说。
)添加如下成员(红色为添加的):class test2Frame: public wxFrame{public:test2Frame(wxWindow* parent,wxWindowID id = -1);virtual ~test2Frame();private://(*Handlers(test2Frame)void OnQuit(wxCommandEvent& event);void OnAbout(wxCommandEvent& event);void OnPaint(wxPaintEvent& event);void OnKeyDown(wxKeyEvent& event);void OnLeftDown(wxMouseEvent& event);void OnClose(wxCloseEvent& event);void OnLeftDClick(wxMouseEvent& event);//*)void RePaint(float dx,float dy,int flag);//自定义重绘窗体函数//(*Identifiers(test2Frame)static const long idMenuQuit;static const long idMenuAbout;static const long ID_STATUSBAR1;//*)private:wxBitmap m_bmp;//要载入的图片wxPoint oldpoint;//记录图片变化前的坐标float x;//记录x轴上的变化量float y;//记录y轴上的变化量wxPoint curpoint;//记录变化后的坐标//(*Declarations(test2Frame)wxStatusBar* StatusBar1;//*)DECLARE_EVENT_TABLE()};打开MouClickMain.cpp文件,在MouClickFrame的构造函数中初始化变量如下:m_bmp.LoadFile( _T("./bitmap1.bmp"),wxBITMAP_TYPE_BMP); //装如位图oldpoint.x=70;oldpoint.y=70;curpoint.x=70;curpoint.y=70;x=0.0;y=0.0;添加头文件如下:#include <wx/bitmap.h>#include <wx/math.h>#include <wx/wx.h>#include <wx/event.h>#include <wx/defs.h>#include <wx/utils.h>在主窗体的OnPaint事件中添加代码如下:void test2Frame::OnPaint(wxPaintEvent& event){wxPaintDC dc(this); //创建DCdc.DrawBitmap(m_bmp, curpoint.x, curpoint.y, true); //显示图片}下面来写我们自定义的RePaint事件。
ubuntu课程设计
ubuntu课程设计一、课程目标知识目标:1. 让学生理解Ubuntu操作系统的基本概念,掌握其历史背景和特点;2. 使学生掌握Ubuntu操作系统的安装、配置及基本使用方法;3. 帮助学生了解Linux操作系统的基本命令和文件系统结构。
技能目标:1. 培养学生独立安装和配置Ubuntu操作系统的能力;2. 培养学生熟练使用Ubuntu操作系统进行日常工作和学习的基本技能;3. 培养学生运用Linux命令行解决简单问题的能力。
情感态度价值观目标:1. 培养学生对开源软件和自由软件精神的认同,提高其创新意识和团队协作精神;2. 激发学生对计算机操作系统的学习兴趣,培养其探索精神和自主学习能力;3. 引导学生树立正确的网络安全意识,养成遵守法律法规和道德规范的良好习惯。
课程性质:本课程为信息技术课程,以实践操作为主,理论讲解为辅。
学生特点:学生处于高年级,具备一定的计算机操作基础,对新鲜事物充满好奇,具备较强的自主学习能力。
教学要求:结合学生特点和课程性质,采用任务驱动、案例教学等方法,注重培养学生的实践能力和创新能力。
在教学过程中,关注学生的个体差异,充分调动学生的学习积极性,确保课程目标的实现。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. Ubuntu操作系统简介:包括其历史、特点和开源精神;2. Ubuntu操作系统的安装与配置:讲解安装过程、分区策略、网络配置等;3. Ubuntu操作系统基本使用:文件管理、软件安装与卸载、系统设置等;4. Linux基本命令:文件操作、目录操作、权限管理、文本处理等;5. 文件系统结构:介绍Linux文件系统结构,理解目录树及其作用;6. Ubuntu操作系统安全与维护:系统更新、病毒防护、软件源管理等;7. 个性化设置与软件推荐:介绍实用软件、桌面环境、系统优化等。
教学大纲安排:第一课时:Ubuntu操作系统简介;第二课时:Ubuntu操作系统的安装与配置;第三课时:Ubuntu操作系统基本使用;第四课时:Linux基本命令(一);第五课时:Linux基本命令(二);第六课时:文件系统结构;第七课时:Ubuntu操作系统安全与维护;第八课时:个性化设置与软件推荐。
乌班图(Ubuntu)命令使用技巧
前言下面的命令大都需要在控制台 / 终端 / shell下输入。
控制台, 终端, 和 shell意味着同样一件事 - 一个命令行界面,他可以用来控制系统。
打开一个控制台:应用程序 --> 附件 --> 终端任何一个使用 'sudo' 作为前缀的命令都需要拥有管理员(或 root) 访问权限。
所以你会被提示输入你自己的密码。
安装升级查看软件xx x安装内容dpkg -L xxx查找软件库中的软件apt-cachesearch正则表达式或aptitu de search软件包显示系统安装包的统计信息apt-cachestats显示系统全部可用包的名称apt-cachepkgnam es显示包的信息apt-cacheshow k3b查找文件属于哪个包dpkg -S filena meapt-file search filena me查看已经安装了哪些包dpkg -l也可用dpkg -l | less翻页查看查询软件xx x依赖哪些包apt-cachedepend s xxx查询软件xx x被哪些包依赖apt-cacherdepen ds xxx增加一个光盘源sudo apt-cdromadd系统更新sudo apt-get update (这一步更新包列表)sudo apt-get dist-upgrad e (这一步安装所有可用更新)或者sudo apt-get upgrad e (这一步安装应用程序更新,不安装新内核等)清除所有已删除包的残馀配置文件dpkg -l |grep ^rc|awk '{print$2}' |sudo xargsdpkg -P如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。
dpkg: --purgeneedsat leastone packag e name argume ntType dpkg --help for help aboutinstal lingand deinst allin g packag es [*];Use `dselec t' or `aptitu de' for user-friend ly packag e manage ment; Type dpkg -Dhelpfor a list of dpkg debugflag values;Type dpkg --force-help for a list of forcin g option s;Type dpkg-deb --help for help aboutmanipu latin g *.deb files; Type dpkg --licens e for copyri ght licens e and lack of warran ty (GNU GPL) [*].Option s marked[*] produc e a lot of output- pipe it throug h `less' or `more' !编译时缺少h文件的自动处理sudo auto-apt run ./config ure查看安装软件时下载包的临时存放目录ls /var/cache/apt/archiv es备份当前系统安装的所有包的列表dpkg --get-select ions| grep -v deinst all > ~/somefi le从上面备份的安装包的列表文件恢复所有包dpkg --set-select ions< ~/somefi lesudo dselec t清理旧版本的软件缓存sudo apt-get autocl ean清理所有软件缓存sudo apt-get clean删除系统不再使用的孤立软件sudo apt-get autore move如果使用sudo apt-get autore move--purge的话会把这些孤立软件的残留配置文件也一并移除查看包在服务器上面的地址apt-get -qq --print-uris instal l ssh | cut -d\' -f2彻底删除Gn omesudo apt-get --purgeremove liborb it2彻底删除KD Esudo apt-get --purgeremove libqt3-mt libqtc ore4一键安装 LAMP 服务sudo taskse l instal l lamp-server删除旧内核sudo aptitu de purge~ilinux-image-.*\(\!`uname-r`\)导入ppa源的key值#W: GPG签名验证错误:unch jaunty Releas e: 由于没有公钥,下列签名无法进行验证: NO_PUB KEY 5126890CDCC7AFE0sudo apt-key adv --recv-keys --keyser ver keyser ver.ubunt 5126890CDCC7AFE0 #5126890CDCC7AFE0替换为你需要导入的K ey值增加 add-apt-reposi tory命令sudo apt-get instal l softwa re-proper ties-common增加一个pp a源sudo add-apt-reposi toryppa:user/ppa-name#使用 ppa 的地址替换ppa:user/ppa-name添加163镜像源sudo add-apt-reposi tory"deb http://mirror /ubuntu/ `lsb_re lease -cs` main restri cteduniver se multiv erse"sudo add-apt-reposi tory"deb http://mirror /ubuntu/ `lsb_re lease -cs`-update s main restri cteduniver se multiv erse"sudo add-apt-reposi tory"deb http://mirror /ubuntu/ `lsb_re lease -cs`-securi ty main restri cteduniver se multiv erse"系统升级1这里指的是版本间的升级,例如 9.04=>10.04。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.c 为后缀的文件, C 语言源代码文件; .C , .cc 或 .cxx 为后缀的文件,是 C++ 源代码文件且必须要经过预处理; .h 为后缀的文件,是程序所包含的头文件; .o 为后缀的文件,是编译后的目标文件;
●
●
●
从源代码生成可执行文件的编译过程,要经历四个相互关联的步骤∶预处理 ( 也称预编 译, Preprocessing) 、编译 (Compilation) 、汇编 (Assembly) 和链接 (Linking) 。 编译过程中, GCC 的最基本用法如下:
最后一行“ (gdb) ” 为 GDB 内部命令 引导符,等待用户输入 GDB 命令。 使用“ file” 命令载入被调试程序。 使用“ q” 命令退出 GDB 调试环境。
5.2.4 Make 工具
由多个源文件组成的大型软件,每次修改源文件并重新编译,开发效率不高, make 工具 能快速组织源文件进行编译,通过 Makefile 文件描述,自动维护编译工作。 使用 make 进行编译时,没有每编译过的源文件、上一次执行 make 后修改过的源文件及 包含上一次执行 make 后修改的过头文件的源文件,在本次 make 中将被重新编译。 Makefile 文件描述了软件包中文件之间的关系,提供更新每个文件的命令。是文本 形式的数据库文件,由一系列 Makefile 描述规则组成,规则格式如下: target : prerequisites command ... ... 目标:依赖 执行指令 target :一个目标文件。为 Object File 或执行文件或是一个标签( Label )。 prerequisites :生成 target 所需要的文件或是目标。 command :生成规制, make 需要执行的命令,任意的 Shell 命令。一定要以 Tab 键开 始。
●
●
●
●
●
●
●
●
●
5.1.2 安装编译工具
在 Ubuntu 中进行软件开发前,需要安装相应的编译工具、配置工具和开发函数库。 开发基于 C/C++ 的软件,需要编译所需的常用文件和工具,要安装 build-essential 这个软件包,在终端中输入如下命令:
$ sudo apt-get install build-essential
5.2.2 GCC 编译器(续)
GCC 具体编译过程如下:
●
预编译阶段:处理宏定义和 include ,并做语法检查。
$ gcc -E test.c -o test.i
●
编译阶段:生成汇编代码。
$ gcc -c test.s -o test.o
●
汇编阶段:生成目标代码。
$ gcc -c test.s -o test.o
开发基于 GTK 的应用程序,需要安装 GTK 开发包,在终端中输入如下命令:
$ sudo apt-get install gnome-devel gnome-devel-docs
开发基于 QT4 的应用程序,需要安装 QT4 开发包, 在终端中输入如下命令:
$ sudo apt-get install qt4-dev-tools qt4-doc qt4-dev-tools-dbg
5.2.4 Make 工具(续)
简单的 Makefile 文件实例:
prog : filea.o fileb.o filec.o gcc filea.o fileb.o filec.o -LS -o prog filea.o : filea.c a.h defs gcc -c filea.c fileb.o : fileb.c b.h defs gcc -c fileb.c filec.o : filec.c c.h gcc -c filec.c
5.1.4 编程工具概述
IDE Vi/Emacs Geany Anjuta Code::Blocks KDeveklop Qt 创造器 Eclipse NetBeans BlueFish MonoDevelop 适合语言 C/C++ V V V V V V V V V V V V V V V V V V V V V V V V V V V JAVA V V V V C# V PHP V V HTML V V V Windows
5.2.2 GCC 编译器
GCC ( GNU Compiler Collection )是一套由 GNU 开发的编程语言编译器。是自由软 件,能处理 C 、 C++ 、 Fortran 、 Pascal 、 Objective-C 、 Java 以及 Ada 与其他语言。 GCC 在使用过程中,在不同的阶段会遇到不同格式文件,如下(更多Code::Blocks
2 、 安装与中文显示
在“开发工具”类别的“集成开发环境”子类中手动安装。 默认情况下用户界面及菜单为英文,从网上下载中文包 codeblocks.mo 并安装,显示中 文,在终端输入如下命令:
$ sudo mkdir -p /usr/share/codeblocks/locale/zh_CN $ sudo cp codeblocks.mo /usr/share/codeblocks/locale/zh_CN/.
●
启动程序,按自定义的要求运行程序。 可让被调试的程序在指定的断点处停住。 在程序被停住时,可以检查此时程序中所发生的事。 动态的改变程序的执行环境。 GDB 中命令很多,完成日常的程序调试只需其中十个左右的命令 , 见讲义。 在终端中输入命令启动 GDB :
●
●
●
$ gdb 或 gdb <filename>
5.2 经典 C/C++ 开发环境
程序开发本质上就是从编辑到编译,再到调试的过程,这就需要一个合适的编辑器,在 Ubuntu 中普遍使用 vim 或 emacs 编辑器,但 vi 是最通用的文本编辑器,只要是 Linux 或 Unix 系统,都有 vi 编辑器,但 emacs 不一定有, vi 功能强大、使用方便,能编辑配置文 件、编写程序和 Shell 脚本,推荐使用 vi ,在桌面环境下,也可用 gedit 替代。
5.3.2 Code::Blocks
1 、概述
开放源码的全功能的跨平台的 C/C++ 集成开发环境。 有以下特点:
●
提供许多工程模板:控制台应用、 DirectX 应用、动态连接库、 OpenGL 应用、 QT 应用、 静态库、 SmartWin 应用、 Win32 GUI 应用、 wxWidgets 应用、 wxSmith 工程等。 支持语法彩色醒目显示,支持代码完成支持工程管理、项目构建、调试。 支持插件:代码格式化工具 AStyle ;代码分析器;类向导;代码补全;代码统计;编译 器选择;复制字符串到剪贴板;调试器;文件扩展处理器; Dev-C++DevPak 更新 / 安装 器; DragScroll ,源码导出器,帮助插件,键盘快捷键配置,插件向导; To-Do 列表; wxSmith ;; wxSmith MIME 插件; wsSmith 工程向导插件; WindowsXP 外观。
●
编辑工具:如 Gedit 文本编辑器、 vim 编辑器和 emacs 代码编辑器。 编译工具:如 C/C++ 编译工具、 java 、 python 等。 配置文件生成工具:用于组织大型软件的编译与安装,如 make 、 autoconf 和 ant 工具。 可视化编程开发工具:如 code::block 、 Eclipse 、 Bluefish 、 Monodevelop 等。 开发工具包: Linux 提供了 GNU C 函数库、 Motif 函数库、 GTK 函数库和 QT 函数库。 项目管理工具:常用的有 CVS 和 SVN 版本控制软件。 Ubuntu 下包括了多种编程类型,常见类型有以下: 普通程序开发:使用 C/C++ 、 Java 、 Python 开发出高效的、可移植性的应用程序。 Web 编程:除静态网页设计,还包括 PHP 、 JSP 、 Perl 、 Python 的开发编程。 X-Win 编程:使用 Motif 、 QT 、 KDE 和 GTK 函数库开发 X-Window 应用程序。 shell 编程:类似编写 Windows 下的 BAT 文件,用于更好使用和管理 Linux 系统
$ gcc [options] [filenames]
options 为编译器所需要的参数,大约有 100 多个,多数平时很少用到 ,filenames 给 出相关的文件名称。 -c ,只编译,不连接成为可执行文件, .c 的源代码生成 .o 为后缀的目标文件。 -o output_filename ,输出名为的 output_filename 文件,不能和源文件同名。
vim 视为增强版的 vi ,在 Ubuntu 中使用的是 vim ,而 vi 作为 vim 的一个符号链接。
5.2.1 VIM 编辑器
vi 与其他编辑器有很大不同,是模式编辑 器,通过模式的切换来完成编辑工作, vi 有三种基 本工作模式,具体如下:
●
命令模式:使用 vi 时便是此模式,在此模式 中,可使用方向键移动光标,并可对文件内容 进行复制、粘帖、替换、整行删除等操作; 编辑模式:在此模式中,可以对文件进行写操作。从命令方式进入编辑模式,按 下“ i” 键或“ a” 键,从编辑模式返回命令模式按下“ ESC” 键。 Ex 模式:又称为底行命令模式,在此模式下,可以输入相关指令进行查找或替换,推出 vi 。从命令方式进入 EX 模式,按“ :” 键,从 EX 模式返回命令模式按下“ ESC” 键。
注意: gcc 前的空格为 TAB 键。
5.3 C/C++ 集成开发环境
5.3.1 概述
集成开发环境( IDE , Integrated Development Environment )是提供程序开发环境的 应用程序,包括编辑器、编译器、调试器和图形用户界面。集成代码编写、分析、编译、调试 等功能的一体化套件。 Ubuntu 有许多集成开发环境,对于 C/C++ ,有 Geany 、 Anjuta 、 Code::Blocks 、 KDevelop 、 Qt 创造器、 Eclipse CDT 等。