Makefile入门一、helloworld
1、了解gcc从源码到可执行文件的步骤
大体分为一下四个步骤
第一步、预处理阶段:处理源码中的预处理语句(总是以#
打头,如#include、#if #elif #end #error、#pragma pack|comment等);
gcc -E test.c -o test.i 或 gcc -E test.c
第二步、编译阶段:通过词法分析和语法分析,确认所有指令都符合语法规则后,将其转换成功能等效的汇编语言代码;
gcc -S test.i -o test.s
第三步、汇编阶段:使用汇编器对汇编代码进行处理,生成机器语言代码,保存在后缀为.o的目标文件中。
gcc -c test.s -o test.o
第四步、链接阶段:将各个模块之间相互作用的部分都处理好,使得各个模块之间能够正确地衔接。
gcc test.o -o test
2、Makefile的helloworld
了解了源码到可执行文件的步骤,就可以开始一个简单的helloworld了
建立一个hello文件夹,下有hello.cc
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
文件下有Makefile文件
#语法规则
# targets...:prerequisites...
# 目标文件...:先决条件
# target 这 一 个 或 多 个 的 目 标 文 件 依 赖 于 prerequisites 中 的 文 件
# command
hello:hello.cc
gcc hello.cc -o hello
.PHONY:clean
clean:
-rm hello
#.PHONY 意思表示 clean 是一个“伪目标”
#而在 rm 命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。
#当然,也可以这样
#clean:
# -rm hello
#但这是不推荐的,如果在当前目录下,存在一个clean,那么就不执行clean后面的规则了
然后cd到当前目录,
make
就可以发现目录下出现hello的可执行文件
3、提到Makefile不得不了解gcc命令
语法
gcc(选项)(参数)
一些常用选项
-o:指定生成的输出文件;
-On:n为数字1~3,使用编译优化级别n编译程序;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-Wall:显示警告信息;
-c:仅执行编译操作,不进行链接操作。
更为细节的可参考
gcc的使用简介与命令行参数说明