makefile实例(1)-helloworld
简单makefile实例
1,源文件:
main.cpp
#include <stdio.h> int main()
{
printf("Hello World\n");
return 0;
}
2,编写makefile
若使用g++命令编译链接程序,可以:
g++ -o hello main.cpp
或
g++ [-o main.o] -c main.cpp
g++ -o hello main.o
若使用make命令,则可以这么编写makefile文件(两种写法分别对应了上面说的两条g++命令):
提示:
2.1,makefile的基本格式为“目标:依赖 命令”
一个 makefile 主要含有一系列的规则,如下:
A: B
(tab)<command>
(tab)<command>
重要: 每个命令行前都必须有tab符号
举例来说,一种简单写法如下:
main : main.c
gcc main.c –o main
在终端执行make命令就可以得到main文件了
2.2 执行过程
通常make命令会逐行解释makefile文件,然后执行第一个”目标格式行”及其后的”目标命令行“。直到碰到下一个”目标格式行”为止。
注意这里指的是下一个”目标格式行“,而不是文件末尾。
所以我们把生成最后的可执行文件的makefile代码放在第一行时,只需要键入make就可以。
而有些makefile文件未将生成最后的可执行文件的代码放在第一行,所以如果make的话,就只能执行到第一个目标格式行的code.
另外,我们使用伪目标让makefile执行不同的操作,如定制Debug和Release版本,清空中间生成文件,安装软件包等等。
2.3, 这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,其冒号后面为空,make就不会找文件的依赖性,也就不会自动执行其后所定义的命令。
要执行其后的命令,就需要在make 命令后显式指出这个名字。这样我们就可以定义一些与编译无关的命令:打包程序,清理程序等外围操作等。
用".PHONY {目标名}"定义一个伪目标, 用"make {目标名}"执行该伪目标
.PHONY : clean
clean :
@rm -f main *.o
@echo 'clean'
此时执行make命令,终端会显示系统执行的每条命令,如果你不想系统显示它执行的命令,在每条命令的前面加上“@”即可。
hello : main.cpp
g++ main.cpp -o hello
clean:
rm hello main.o -rf
或
hello: main.o
g++ -o hello main.o
main.o : main.cpp
g++ -c main.cpp clean:
rm hello main.o -rf
3,执行make,进行编译链接,
[root@localhost 0-helloworld]#make
g++ -o hello main.o
[root@localhost 0-helloworld]#ll
总用量 20
-rwxr-xr-x 1 root root 6908 11月 26 22:59 hello
-rw-r--r-- 1 root root 72 11月 26 22:10 main.cpp
-rw-r--r-- 1 root root 1472 11月 26 22:35 main.o
-rw-r--r-- 1 root root 144 11月 26 22:51 makefile
4,执行程序
[root@localhost 0-helloworld]#./hello
Hello World
5,清理程序
[root@localhost 0-helloworld]#make clean
rm hello main.o -rf
[root@localhost 0-helloworld]#ll
总用量 8
-rw-r--r-- 1 root root 72 11月 26 22:10 main.cpp
-rw-r--r-- 1 root root 151 11月 26 23:02 makefile
[root@localhost 0-helloworld]#
makefile实例(1)-helloworld的更多相关文章
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis gcc和whereis make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC ...
- Ubuntu下比较通用的makefile实例
本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html 笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...
- makefile实例(3)-多个文件实例优化
我们先看一下make是如何工作的在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一 ...
- makefile实例(2)-多个文件实例
1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * ...
- Makefile 实例实践
本文为原创文章,转帖需指明该文链接 目录结构如下: comm/inc/apue.h comm/errorhandler.c atexit.c Makefile 文件内容如下: apue.h #if ...
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转
http://www.crazyant.net/2011/10/29/linux%E4%B8%8Bgcc%E5%92%8Cmakefile%E5%AE%9E%E4%BE%8B%EF%BC%88%E4% ...
- makefile实例
#.PHONY:cleanall cleanobj cleandiff #cleanall:cleandiff cleanobj # rm program #cleanobj: # rm obj.c ...
- Makefile 实例
CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...
- makefile简单helloworld
最近要在unix系统上开发c++应用程序,但默认情况下unix编译c++程序需要使用makefile.其实makefile语法还是比较简单,看上去有点像ant.废话不说了,直接上helloworld. ...
随机推荐
- Android笔记——Drawerlayout创建侧滑出菜单
1.首先务必导入support-v4包 2.布局文件主标签为<android.support.v4.widget.DrawerLayout>,并为其设置id 其子标签必须包 ...
- Android 音乐播放器之--错误状态下调用导致的异常
MediaPlayer必须在合适的状态下调用合适的方法,否则会出现异常,下面列出常见错误信息和说明: 1.E/MediaPlayer(11310): stop called in state 1 调用 ...
- C++时间戳转化(涉及GMT CST时区转化)
问题由来 时间戳转换(时间戳:自 1970 年1月1日(00:00:00 )至当前时间的总秒数.) #include <stdio.h> #include <time.h> i ...
- eclipse安装Gradle
第一步:下载Gradle>http://gradle.org/gradle-download 第二步:解压gradle-2.5, 配置环境变量:GRADLE_HOME path添加;%GRADL ...
- 关于MySQL
DBMS - 数据库管理系统(Database Management System) RDBMS - 关系数据库管理系统(Relational Database Management System) ...
- BZOJ 1047 理想的正方形(单调队列)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1047 题意:给出一个n*m的矩阵.在所有K*K的子矩阵中,最大最小差值最小的是多少? 思 ...
- R语言数据类型转换
test for data type is.numeric(), is.character(), is.vector(), is.matrix(), is.data.frame() convert i ...
- [Golang] base64加密与解密
首先解释以下什么是base64(来自百度百科): Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64 ...
- 转:最值得学习阅读的10个C语言开源项目代码
阅读优秀代码是提高开发人员修为的一种捷径…… 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试 ...
- ubuntu13.04云主机部署gitlab6.6
GitLab 是何物? GitLab是 GitHub 的山寨版,GitLab几乎包含了GitHub的所有功能,还包含比较有特色的功能:Code Review,Wiki,Merge Requests,最 ...