Linux下C/C++程序开发管理(makefile)
一、引言
从我们刚开始编写一个简单的C/C++ "Hello,World!",到将其编译、运行处结果—这部分工作IDE(集成开发环境)帮我们做了,包括语法错误检查,编译,调试,执行二进制程序。大部分时间我们只关注程序代码本身的编写,如何在Linux下对C/C++源代码的 进行有效管理,包括编译、链接、调试,make工具可以帮助我们完成这部分的工作。
二、从“Hello,World”说起
1、执行单个源文件
一个编写好的C或C++代码源程序需要通过编译、链接等步骤才能生成可执行的二进制文件。
例如:源文件:hello_world.c的源码为:

[1] 第一步:编译生成目标文件 hello_world.o (gcc-c hello_world.c )
[2] 第二步:链接(这里只有一个hello_world.o)生成可执行文件hello_world(gcc -o hello_world hello_world.o)
2、编译多个源文件
例如:源文件:hello_world.c say_ok.c 和main.c的源程序代码为:

需要对包含这个三个源程序文件项目生成可执行文件main
[1] 生成目标对象文件(OBJ):

[2] 链接生成可执行文件main:
三、管理多个源程序文件
通常我们在编写项目的时候不可能只有一个源文件程序(main.c/main.cpp),一般情况下会有多个源文件(.c/.cpp)和头文件需要管理。正如前面所描述的如果有三个源文件hello_world.c, say_ok.c, main1.c,每次当我们对源码修改过后,都必须重新运行一遍所有的编译命令,试 想一 下如果文件不止三个,而是有很多个的时候......这将对程序员无疑是一个灾难。所以,我们必须寻求一个有效的的程序源码管理方式—make机制可以帮助我们解决这个问题。
1、make
make命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。
2、makefile文件书写格式
目标:原料
<Tab>加工方法
3、makefile实例

4、make常用选项
[1]-B 选项: make 命令不会编译那些自从上次编译之后就没有更改的文件,但是,如果你想覆盖 make 这种默认的行为,可以使用-B选项
[2]-g选项:调试选项,用于GDB调试
[3]clean: 清除所有当前的对象文件好和执行文件
Linux下C/C++程序开发管理(makefile)的更多相关文章
- linux下的C语言开发 进程创建 延伸的几个例子
在Linux下面,创建进程是一件十分有意思的事情.我们都知道,进程是操作系统下面享有资源的基本单位.那么,在linux下面应该怎么创建进程呢?其实非常简单,一个fork函数就可以搞定了.但是,我们需要 ...
- Linux下快速搭建php开发环境
php开发环境快速搭建 一.Linux下快速搭建php开发环境 1.安装XAMPP for Linux XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包,使用XA ...
- Linux下执行Java程序报错
在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java 会提示未找到指令,但用java -verison测试环境变量 ...
- Linux下VsFTP和ProFTP用户管理高级技巧 之一
Linux下VsFTP和ProFTP用户管理高级技巧 FTP服务时互联网上比较古老的一种应用,至今Interner应用面非常广泛,但令管理员头痛不已的是其用户管理,既多且杂,如何解决这一问 ...
- linux 下部署web 程序
linux 下部署web 程序 1. 创建ucenter用户 一般情况下,发布应用程序都不是使用root用户的,需要创建一个普通用户来发布程序: 创建ucenter用户: useradd -d /uc ...
- Linux学习心得之 Linux下命令行Android开发环境的搭建
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...
- Ubuntu Linux下如何配置Android开发环境
下载和安装Win7系统Android开发环境中讲了怎样在Win7系统中安装Android开发环境,那么怎样在Linux系统中配置Android开发环境呢?本篇文章就将演示如何使用Eclipse.And ...
- [置顶] Linux下发布QT程序
Linux下发布QT程序 概述 无论在windows下还是在linux下,可执行程序的运行都依赖于相关的运行库,我们需要将依赖的库找到放到特定的位置,让可执行文件能够找到.在不知道可执行文件依赖哪些库 ...
- 终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误
终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误 http://blog.csdn.net ...
随机推荐
- How Tomcat Works(三)
上文中描述的简单的服务器是不符合Servlet规范的,所以本文进一步描述一个简单的Servlet容器是怎么实现的 所以我们首先要明白Servlet接口规范,规范有不同版本,本人就先一视同仁了: pub ...
- java_web用户的自动登录模块的实现
javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Serializable{ / ...
- Windows7部署WordPress傻瓜式教程(IIS7.5+MySQL+PHP+WordPress)
http://www.cnblogs.com/vengen/archive/2010/01/01/WordPressInstall.html
- 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证]
二.使用Azure AD进行身份验证 之所以将Azure AD 作为开始,是应为基本上我们所有应用都需要进行安全管理.Azure Active Directory (Azure AD) 通过以下方式简 ...
- fastJson泛型如何转换
引子 现在负责的业务 和 json 打交道比较多, 最近使用fastJson框架 json串转成泛型对象遇到了一个异常 : java.lang.ClassCastException 还原下场景 : 模 ...
- svn 冲突解决
svn: E155015: Aborting commit: '$path + $file' remains in conflict 解决步骤 1.svn resolved 'file'执行后结果Re ...
- CSS的魔法和魅力
其实我最开始学会的语言是HTML,我记得那还是大一的事情.当时我对床的兄弟DR放了一本HTML的书在床上,我因为没事就拿来看看.那本书大概只有50页左右,可是可以说如果没有这本书,今天Maybe我不会 ...
- 从jQuery的缓存到事件监听
不知道大家有没有发现,用jQuery选择器"选择"之后的DOM上会添加jQuery*********属性. <DIV id=d1 jQuery1294122065250=&q ...
- ecmall widgets 挂件开发详解
Ecmall挂件开发 实质上是后台开发很多页面,分别去调用程序展示这些页面,达到首页内容更换很快的目的,这样做减少后续开发,开发人员只需开发挂件就可以了,至于位置可随意定.(还需调整html,但是起码 ...
- cocos2dx实例开发之flappybird(入门版)
cocos2dx社区里有个系列博客完整地复制原版flappybird的全部特性.只是那个代码写得比較复杂,新手学习起来有点捉摸不透,这里我写了个简单的版本号.演演示样例如以下: watermark/2 ...