查看gcc版本:gcc -v。
编译命令:gcc xxx.c -o xxx
主要选项:
编译流程: 预处理、编译、汇编和链接。预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。汇编就是将汇编语言文件编译成二进制目标文件。链接就
是将汇编出来的多个二进制目标问价链接在一起,形成最终的可执行文件,链接的时候还会涉及到静态库和动态库等问题。可以使用gcc命令生成可执行文件,并没有先将 c 文件编译成.o文件再链接在一起。
实验共有5个文件:main.c,input.c,calcu.c,input.h,calcu.h。
//main.c
#include
#include "input.h"
#include "calcu.h"
int main(int argc, char *argv[])
{
int a, b, num;
input_int(&a, &b);
num = calcu(a, b);
printf("%d + %d = %d\r\n", a, b, num);
}
//input.c
#include
#include "input.h"
void input_int(int *a, int *b)
{
printf("input two num:");
scanf("%d %d", a, b);
printf("\r\n");
}
//calcu.c
#include "calcu.h"
int calcu(int a, int b)
{
return (a + b);
}
//input.h
#ifndef _INPUT_H
#define _INPUT_H
void input_int(int *a, int *b);
#endif
//calcu.h
#ifndef _CALCU_H
#define _CALCU_H
int calcu(int a, int b);
#endif
实验完成的功能是获取键盘输入的两个数,打印它们的和。input_int函数的参数是两个int类型指针变量,调用的时候需要定义两个int类型数字,去它们的地址作为函数输入参数。输入命令“gcc main.c calcu.c input.c -o main”进行编译和链接,再使用“./main”执行即可,但这样的缺点是gcc命令要输入所有c文件名,且修改一个文件也要全部重新编译。
2.2.Makefile概念和基本操作步骤Makefile特性:
如果工程没有编译过,那么工程中的所有.c 文件都要被编译并且链接成可执行程序。 如果工程中只有个别 C 文件被修改了,那么只编译这些被修改的 C 文件即可。 如果工程的头文件被修改了,那么需要编译所有引用这个头文件的 C 文件,并且链接成可执行文件。操作步骤:
在工程目录创建名为“Makefile”的文件。 修改/etc/vim/vimrc。规则格式:
目标…:依赖文件集合……
命令 1
命令 2……
make命令会为Makefile中的每个以TAB开始的命令创建一个Shell进程去执行。
Makefile文件内容规则分析:
格式:%.o : %.c
(Tab)命令
通过模式规则可以使用一条规则将所有的.c文件编译为对应的.o文件。目标中的“%”表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c 结尾的文件。“a.%.c”表示以 a.开头,以.c 结束的所有文件。
自动化变量: 上面讲的模式规则中,每一次对模式规则进行解析的时候都会是不同的目标和依赖文件,而命令只有一行。使用自动化变量可以通过一行命令来从不同的依赖文件中生成对应的目标。所谓自动化变量就是它会把模式中所定义的一系列的文件自动的挨个取出。自动化变量只应该出现在规则的命令中,常用的自动化变量如下表:
使用规则模式和自动化变量后,Makefile可以修改为:
语法格式:
endif
//以及
else
endif
4个关键字: ifeq、ifneq、ifdef 和 ifndef。
3.Shall编程 3.1.Shall脚本基础简介: shell脚本是纯文本文件,一行一行的执行,shell脚本扩展名为.sh,其第一行必须是 “#!/bin/bash”。
交互式shell脚本(实验一):
编写好shell脚本后运行的时候发现权限不够,使用“ls xxx.sh -l”发现脚本文件没有可执行权限,因此使用chmod命令将脚本文件的权限全部打开,就可以正常执行了。
shell脚本数值计算(实验二): shell仅支持整形,数值计算使用$((表达式))。注意total后不能加等于号。
test命令(实验三):
下图的例子中需要输入文件名,若文件存在打印“||”左边的,不存在则打印“||”右边的内容。
默认变量(实验四):
$0~ $n:表示shell脚本参数,包括shell脚本命令本身(本身为$0)。
$#:#表示最后一个参数的标号。
$@:表示$1,$2,$3…
条件判断(实验一):
case语句(实验二):
函数调用(实验三):
函数传参(实验四):
while do done循环(实验五): 条件成立时一直循环,实验中若输入不为“close”则一直循环。
until do done循环(实验六): 条件不成立时循环,条件成立退出循环。
for循环(实验七):
for循环处理数据(实验八):
参考正点原子嵌入式linux开发指南