make 与 makefile
.目标的语法
目标名:依赖目标
@命令
@命令
make的命令行使用
make -f make 脚本文件 目标名 .目标的划分
demo.mk
demo:
gcc -c -fpic input.c
gcc -c -fpic primer.c
gcc -shared -olibdemo.so input.o primer.o
gcc demo.c -ldemo -L. -omain 转变为 demo1.mk:
compile:
gcc -c -fpic input.c
gcc -c -fpic primer.c
link:complie
gcc -shared -olibdemo.so input.o primer.o
demo:link
gcc demo.c -ldemo -L. -omain <compile link 是不存在的文件,不存在就是最新的> make -f demo1.mk compile
make -f demo1.mk link
make -f demo1.mk demo .默认目标
a.不指定目标,执行第一个目标
make -f demo1.mk
等介于make -f demo1.mk compile b.不指定make 文件,默认文件是makefile ,Makefile, makefile优先加载
make 目标的调用规则
make执行目标:(make把 目标 当作文件)
搜索与目标相同的文件
如果文件存在,则判定日期.
日期最新,则停止执行,输出提示
日期不是最新,则进行执行.
没有依赖就是最新的目标文件,不编绎 比较:当前目标与依赖目标 demo2.mk:
//跟据编译结果文件依赖,make就可以对实际存在的文件时间比较,决定编译进程
input.o:input.c:
gcc -c -fpic input.c
primer.o:primer.c
gcc -c -fpic primer.c
libdemo.so:input.o primer.o
gcc -shared -olibdemo.so input.o primer.o
demo:demo.c libdemo.so
gcc demo.c -ldemo -L. -odemo
clean:
rm -rf *o demo *.so *a .建义:
只要有文件输出,就把任务作为一个目标,并把输出的文件作为目标名 .潜规则(不建议)
注释符号 #
.C目标与.O目标
查找.O目标,目标不存在,就把.O替换成.C
如果.C存在,实施潜规则:直接调用GCC 把.C执行为.O demo3.mk:
//跟据编译结果文件依赖,make就可以对实际存在的文件时间比较,决定编译进程
#input.o:input.c:
# gcc -c -fpic input.c
#primer.o:primer.c
# gcc -c -fpic primer.c
libdemo.so:input.o primer.o
gcc -shared -olibdemo.so input.o primer.o
demo:demo.c libdemo.so
gcc demo.c -ldemo -L. -odemo
clean:
rm -rf *o demo *.so *a .定义变量 变量名=值1 值2
$(变量名) ${变量名} demo4.mk:
OBJ=input.o primer.o
input.o:input.c:
gcc -c -fpic input.c
primer.o:primer.c
gcc -c -fpic primer.c
libdemo.so:$(OBJ)
gcc -shared -olibdemo.so input.o primer.o
demo:demo.c libdemo.so
gcc demo.c -ldemo -L. -odemo
.PHONY:clean
clean:
rm -rf *o demo *.so *a
echo ${PATH} //环境变量
echo $(PATH) .伪目标
不把目标当成文件处理的
声明伪目标
.PHONY:clean 没有讲的:
.make的配制
.make变量的操作函数
.多make文件使用 二.环境变量 env.c int main(int args,char *argv,char **arge)
{
while(*arge)
{
printf("%s\n",*arge);
arge++; } } arge** ---->char*------>内容
char* makefile env:env.c
gcc env.c -omain
clean:
rm -rf main *.o 命令行参数 argv与环境行arge都是字符串数组
约定:最后一个字符串是NULL/ .在C的标准库提代了一个外部变量
#include <stdio>
#include <unistd.h>
void main(){
extern char **environ
while(*environ)
{
printf("%s\n,*environ")
*environ++
}
}
make env
----------------------------------------------
.取环境变量的值
getenv
setenv
unsetenv #include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
main()
{
char *val=getenv("PATH");
printf("%s",val);
} 三.IO的认识
.认识内核对象
不允许访问内核算设备和内存
但可以通过内核系统函数去访问
对每个内核对象进行编号ID.
如果访问内核算对象,只能通过ID 编程模型:
申请得到一个ID
在内核系统函数中使用ID得到对应内核对象 .如何访问文件:
使用函数,传递一个文件,系统打开文件,加载文件返加一个ID
使用函数,传递ID,得到数据
使用函数传ID,告诉系统释放文件 ID:文件描述符号.(fd)
每个程序执行的时候都有一个目录,存放打开的文件的描述符 #include <stdio.h>
#include <stdlib.h>
main()
{
printf("%p",getpid());
while(); } cd /proc//fd
ls ::每个程序可打开三个设备(,,)
:标准输入
:标准输出
:错误输出 .操作文件描述符号
sszie_t write(int fd, void * buf,size_t size);
返回:
> 实际写入的数据
- 写入错误
ssize_t read(int fd, void *buf ,size_t size);
返回:
>:实际读取的数据
=:碰到文件结束符号EOF ctrl+d
-:读取错误 #include <stdio.h>
#include <stdlib.h>
main()
{ while(,"HELLO\n",);
while(,"world\n",);
while(,"louis\n",);
} 建议:
:输入
:输出
:错误 #include <stdio.h>
#include <stdlib.h>
main()
{ while(,"HELLO\n",);
while(,"world\n",);
while(,"louis\n",);
int a=;
write(,&a,);
}
乱码: #include <stdio.h>
#include <stdlib.h>
main()
{
char buf[];
int r=read(,buf,);
printf("youput:%d\n",r);
if(r>)
{
buf[r]=;
printf("::%s\n",buf);
}
if(r==)
{ printf("ctrl+d\n");
}
if(r==-)
{ printf("error\n");
} }

C 高级编程4 makefile 与 IO的更多相关文章

  1. (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  2. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  3. (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  5. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  8. (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. 移动端web页面使用position:fixed问题

    在做移动端项目时,碰到一个很纠结的问题,头部固定的问题,一开始使用fixed,发现一系列的问题, 问题1:footer输入框 focus 状态,footer 被居中,而不是吸附在软键盘上部. 测试环境 ...

  2. (Android Studio)ActionBar's Theme/Style [ActionBar主题风格修改]

    (1)默认theme代码如下: 运行结果: 视觉效果:ActionBar为Dark,背景为Light. (2)将theme改为Light: 运行结果: 视觉效果:ActionBar和背景都为Light ...

  3. 《深入Java虚拟机学习笔记》- 第13章 逻辑运算

    <深入Java虚拟机学习笔记>- 第13章 浮点运算

  4. TcxVerticalGrid 汇总

    赋值 AOrder.LoadSimpleFromFile(sDefineFile); grdRowFileDefine_PostalCode.Properties.Value := AOrder.Or ...

  5. Doing Homework(HDU 1074状压dp)

    题意:给你n个要做的作业,它们的名字.期限.可完成所需天数(必须连续)在规定期限不能完成要扣分(每天一分)求做作业顺序使扣分最少. 分析:作业数量较少,用状态压缩,做到第i种作业花费的天数dp[i]. ...

  6. Testlink & Redmine组合拳演练

    环境:Ubuntu 14.04LTS 一.部署testlink 查看已安装软件: dpkg -l *apache* (apache2.4.7) dpkg -l *php* (未安装) dpkg -l ...

  7. C++空类以及没有成员变量的类的大小

    关于C++中空类的大小为1,我们大家都有所了解,但是除了空类之外的其他一些没有成员变量的类的大小,还是有很多不明之处的. 我们来看如下一个例子: #include<iostream> us ...

  8. MVC 部署出现错误未能写入输出文件xxxxxxx.

    编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\ro ...

  9. 题解西电OJ (Problem 1008 - 数星星)

    题目内容: Description “不要问我太阳有多高 我会告诉你我有多真 不要问我星星有几颗 我会告诉你很多很多” 一天Qinz和wudired在天上数星星,由于星星可以排列成一条直线,他们比赛看 ...

  10. ubuntu 13.04下sublime text 3使用中文输入法

    主要思路参考 http://blog.yanwen.org/archives/1955.html libsublime-imfix.so 这个库自己编译和从他这下载的 md5一样.可以不用编译了.直接 ...