`
runfeel
  • 浏览: 899445 次
文章分类
社区版块
存档分类
最新评论

[Linux]在ubuntu系统下编译运行c程序并使用makefile管理项目

 
阅读更多

先来看一下编译运行c程序的基本命令。

虽然刚装好的系统中已经有GCC了,但是这个GCC什么文件都不能编译,

因为缺少一些必须的头文件,所以要安装build-essential这个软件包。

输入命令:sudoapt-getinstallbuild-essential

其中

sudo 是linux系统上“以超级用户身份运行”的意思允许系统管理员让普通用户执行一些root命令。

apt是一种包管理工具,后面的 install是告诉我想用apt安装某一个软件包 。

build-essential是c语言的开发包,包含了gcc make gdb和libc函数库。


安装完成后写一个 C 语言程序 hello.c 测试一下:

#include<stdio.h>   
int main()   
{   
   printf("Hello Ubuntu!\n");   
   return 0;   
}  

在终端输入命令编译程序:

gcchello.c-ohello

注意,如果不写-o hello,默认会生成a.out文件,选项 -o 用来指定所生成的可执行程序的文件名。

建议在后面加上-o hello来重命名生成文件的名称。


运行生成的文件的命令如下:

./hello

显示
Hello Ubuntu!
这样,C 语言编译器就算是安装成功了。


如果使用Eclipse for C++遇到问题binary not found,是因为没有编译成功,

使用ctrl+B或者点击菜单栏的build all即可。


如果出现gmake未定义 的问题,su切换到root权限之后,在终端输入一下命令即可:

ln -s /usr/bin/make /usr/bin/gmake




接下来是关于Makefile的内容

MakeFile可以简单的理解为是一个项目管理的工具

make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样的去编译和链接程序。

首先,用一个示例来说明Makefile的书写规则。

这个示例来源于GNU的make使用手册,在这个示例中,工程有8个C文件,和3个头文件,

我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。

规则是:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

只要我们的Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,

make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,

从而自己编译所需要的文件和链接目标程序。


Makefile的规则很简单:

target...:prerequisites...
command
...
...


其中,


target也就是一个目标文件,可以是ObjectFile,也可以是执行文件。

prerequisites就是,要生成那个target所需要的文件或是目标。

command也就是make需要执行的命令。(任意的Shell命令)

这是一个文件的依赖关系


也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。

换句话说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。

这就是Makefile的规则。也就是Makefile中最核心的内容。


分享到:
评论

相关推荐

    实验一、嵌入式系统开发环境熟悉

    一、实验目的 1. 熟悉嵌入式开发环境, 掌握实验箱结构及连线方法。 2. 熟悉Ubuntu 系统进行嵌入式Linux 开发的基本环境配置方法。...5. 掌握编写makefile文件进行编译程序并在对应平台下运行的方法。

    linux局域网聊天工具(附带文档和源码参考)

    2.2 熟悉Linux操作系统下的C/C++应用程序开发环境,掌握linux系统下开发工具vi、gcc 和gdb的使用,以及makefile的写法; 2.3 掌握Linux环境下图形工具包GTK和网络编程中socket“套接字”的使用;

    基于ARM-linux的简易电子相册c源码+项目说明(课程设计).zip

    Makefile : 在终端输入make , 交叉编译,得到/bin路径下的可执行文件pho 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能...

    学会在Linux上编译调试C++项目

    本课程主要针对没有或者很少写过linux上C++程序的同学, 本课程会教你如何从0基础开始,安装配置ubuntu虚拟机、使用GCC编译普通程序、动态库、静态库,编写复杂项目配置文件makefile,使用GDB工具调试C++程序。

    C语言学生信息管理系统(单向链表,密码登录,学生端,教师端,功能齐全,登录界面彩色字体,注释超详细,一看就懂!)

    Linux C,Ubuntu;make工具多文件编译,文件操作,用文件保存学生信息表(掉电保护,防丢失) ; 注释超全,每个函数都作了清晰的注释,浅显易懂。程序实现的功能有:防学号重复(学号唯一不可重复,很多操作需要用到...

    C++ QT5跨平台界面编程从入门到实战

    001 介绍 002 QT5开发环境qtcreatorSDK和vs... 013 通过批处理完成qt项目编译并移植到ubuntu下完成qt项目配置和编译 014 qmake的pro项目导出为vs项目 015 qmake引入qt库创建窗口设置头文件分析makefile并设置输出

    Linpop - Beta3(跨平台版)

    在Windows使用MinGW执行Make生成可执行文件,Makefile文件为Makefile_Win32,在Ubuntu下的Makefile文件为Makefile_Linux,注意Windows下编译通过后生成的可执行文件的运行需要GTK+ Windows版本的支持,具体文件请...

    树莓派linux内核交叉编译shell脚本.zip

    树莓派内核交叉编译脚本,ubuntu上运行,scp传到树莓派,运行pifuzhi.sh覆盖原来文件,树莓派B ver2测试通过,但免密码scp没有解决好,另外内核3.6版本没有dtb而是dts文件。

    学习笔记(OpenCV在PC Ubuntu上的安装).docx

    新建安装目录/home/esion/zed,将opencv-2.4.10.zip复制到zed文件夹中并解压缩,这样在zed目录下就有opencv-2.4.10文件夹,在此文件夹中新建一个build和install文件夹。 2、 配置安装链 在opencv-2.4.10文件夹中新建...

    opencv检测人脸程序

    使用opencv简单识别图片人脸的demo,检测脸部部分和眼睛部分,包含程序与makefile,可在Linux直接编译运行使用,方便参考学习。

    stack-smashing:C中的缓冲区溢出程序

    该项目使用perl脚本来运行漏洞利用程序。 支持的操作系统是使用gcc编译器Linux和使用borland编译器的Windows。 当前不支持Mac。 开发者 团队名称是“ shell-code”,成员:Tim Unger Sam Gronhovd Will Czifro 证明...

    wsq压缩编码,开源工程nbis_v4_2_0

    ubuntu 下sudo su切换为超级用户root 交叉编译nbis_v4_2_0所遇到的问题及编译通过过程(交叉编译运行于Android手机平台 交叉编译工具链ndk包含的工具链) 1、编译前首先设置好环境变量 export SYSROOT=$NDK/...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    序并没有结束,我们可以打开windows 任务管理器,可以看到我们的程序仍在执 行。 因为return a.exec();一句表示只要主窗口界面不退出,那么程 序就会一直执行。所以只有用第一种方法,将该语句也放到if 语句中,而在...

    ShuJuJieGouSuanFaShiXianJiJieXiV2.tar.gz

    数据结构 --- 算法实现及解析 第二...修改为ubuntu 16.04 linux环境下,可以编译运行 把文件的名字都修改为小写,每个目录都有makefile.都可以编译 是c语言开发的,不是c++开发的 配合 严蔚敏 编著的 &lt;数据结构 c语言版&gt;,

    新版Android开发教程.rar

    • Linux (tested on Linux Ubuntu Dapper Drake) Supported Supported Supported Supported Development Development Development Development Environments Environments Environments Environments Eclipse IDE o...

    IOS即时通讯包括客户端及服务端代码

    服务端CPP编写,目前是MAC上平台的工程,可以在LINUX下编写相应MAKEFILE编译 自己测试的是UBUNTU, 客户端是IOS的 现在只有一些简单的功能, 登录 注册 搜索添加好友, 简单会话 服务端编译运行 需要MYSQL 至于MAC下...

    Linux下Caffe如何调试

     Anjuta在Ubuntu下的安装方法为:sudo apt-get install anjuta  安装完后打开Anjuta,然后导入Caffe项目工程,这样可以进行代码调试咯。设置断点后,运行-&gt;调试程序,再按F5(单步跨入函数)、F6(单

    RunningLog:使用wxWidgets的C ++运行日志

    在Linux上:安装g ++,wxWidgets和make在Ubuntu上:'sudo apt-get install libwxgtk2.8-dev libwxgtk2.8-dbg build-essential'运行'make'进行编译 在Windows上:(从未测试过)安装cygwin,并确保在安装中包括cvs,...

    Fixed-Vhd-Writer.zip

    完整源码和Makefile文件,可以直接编译运行。Linux下和Windows下都可以编译后运行。VHD虚拟硬盘写入工具,使用LBA方式的、专用于固定大小的VHD。同时可以读取VHD的格式信息,方便后续配置Bochs配置文件。

    MYQQ2009 - 用控制台上QQ

    在Linux上运行时发生的错误。 2. 编译Linux版本。 3. qqconfig.txt缺失提示。 Version 3.00 (2009-1-25) 1. 更换QQ2008贺岁版协议为QQ2009Preview4协议。 2. 全面使用utf8,myqq.c为Windows用户转换为gb。 3. 移除...

Global site tag (gtag.js) - Google Analytics