标题

标题

当我们有多个源程序时,用gcc每个都编译,这样我们没有修改过的源文件也得重新编译一次,很麻烦,这时候写makefile就派上了用场,可以大大的提高我们的编码和调试速度。( 注意:头文件并不参加链接和编译。编译器第一步要做的就是简单的把头文件在包含它的源文件中展开。不知你是否能理解这句话。也就是头文件里面有什么内容,通通把它移到包含这个头文件的源文件里 )为此:
1. 先用编辑器vim编辑三个函数及两个头文件
main.c

#include "sum.h"
#include "max.h"
#include<stdio.h>
int main(int argc,char **agrv)
{  int a,b;  sum_print();  printf("Please input two number:/n");  scanf("%d,%d",&a,&b);  max_print(a,b);
}

sum.h

#ifndef SUM_H
#define SUM_H
#include<stdio.h>
void sum_print();
#endif

sum.c

#include "sum.h"
#include<stdio.h>
void sum_print()
{int i, sum = 0;for (i = 0; i<10; i++){sum += i;}printf("Sum=%d/n", sum);
}

max.h

#ifndef MAX_H
#define MAX_H
#include<stdio.h>
void max_print(int a,int b);
#endif

max.c

#include "max.h"
#include<stdio.h>
void max_print(int a,int b)
{  if(a>b)  {  printf("The Max Number is:%d/n",a);  }  else  {  printf("The Max Number is:%d/n",b);   }
}

2. 生成Makefile文件,利用编辑器vim编辑Makefile文件

sunbin@sunbin-virtual-machine:~$ vim makefile

makefile文件内容如下:

main: main.o sum.o max.o  gcc -o main main.o sum.o max.o  //命令必须以TAB键开头
main.o: main.c sum.h max.h  gcc -c main.c
sum.o: sum.c sum.h  gcc -c sum.c
max.o: max.c max.h  gcc -c max.c

所有文件若下:

3. 编译与运行:

sunbin@sunbin-virtual-machine:~$ make
gcc -c main.c
gcc -c sum.c
gcc -c max.c
gcc -o main main.o sum.o max.o
sunbin@sunbin-virtual-machine:~$ ./main
Sum=45/nPlease input two number:/n

形成文件如下:

黑体`#include “line1.h”
#include “line2.h”

int main(int argc,char **argv)
{
line1_print(“hello runfarther”);
line2_print(“hello runfarther”);

return 0;

}

#include "line1.h"
#include "line2.h"int main(int argc,char **argv)
{line1_print("hello runfarther");line2_print("hello runfarther");return 0;
}
//server.c
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/epoll.h>#define SERV_PROT 9000
#define MAXLINE 10 int main()
{struct sockaddr_in servaddr, cliaddr;sockelen_t cliaddr_len;char buf[MAXLINE];char str[INET_ADDRSTRLEN];int efd;listen = socket(AF_INET, SOCK_STREAM, 0);bero(&servaddr, sizef(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(SERV_PROT);serv.sin_port = htons(SERV_PROT);bind(listenfd, (struct sockaddr*))&servaddr, sizeof(servaddr));listen(listenfd, 20);struct epoll_event event;struct epoll_event resevent[20];int res, leb;efd = epoll_creat(10);event.events = EPOLLIN | EPOLLET;   //ET边沿触发//even.events = EPOLLIN;             // LT水平触发(默认)printf("Accept connections .....\n");cliaddr_len = sizeof(cliaddr);connfd = accept(listenfd, (strcut sockaddr *)&cliaddr, &cliaddr_len);printf("receive from %s at PROT %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr.s_addr, str, sizeof(str)), ntohs(clie_addr.sin_port));event.data.fd = connfd;epoll_ctl(efd, EPOLL_CTL_ADD, &event);while(1) {res = epoll_wait(efd, resevent, 10, -1);printf("res %d\n", res);if (resevent[0].data.fd == connfd){len = read(connfd, buf, MAXLINE/2);write(STDOUT_FILENO, buf, len);}}}return 0;
}
#include<signal.h>
#include<stdio.h>
#include<unistd.h>void sig_usr(int signo)
{if(signo == SIGUSR1)printf("receive SIGUSR1\n");else if(signo == SIGUSR2)printf("receive SIGUSR2\n");elseperror("signal error");
}int main()
{if(signal(SIGUSR1, sig_usr) == SIG_ERR)perror("can't catch SIGUSR1");if(signal(SIGUSR2, sig_usr) == SIG_ERR)perror("can't catch SIGUSR2");for( ; ; )sleep(1);return 0;
}

001 makefile的使用相关推荐

  1. Makefile和shell脚本调用上的一些总结

    大家都知道在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本文试着介绍一下Makefile和shell脚本的不同. 1.在Makefile中只能在target中 ...

  2. Makefile详解——从入门到精通

    转自ChinaUnix,作者gunguymadman,陈皓.链接地址:http://www.chinaunix.net/jh/23/408225.html 陈皓 CSDN 博客:http://blog ...

  3. 001原始编译全志r6平台tinav3.0.2系统

    001原始编译全志r6平台tinav3.0.2系统 2018/6/8 11:32 版本:V1.0 开发板:R6 SDK:tina v3.0.2 1.01原始编译全志r16平台tinav3.0系统: r ...

  4. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

    1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...

  5. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用

    1. 嵌套执行 make 在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模块的编译规则,就会很乱,执 ...

  6. 浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS

    1. include文件包含 当 make 读取到 include 关键字的时候,会暂停读取当前的 Makefile,而是去读 include 包含的文件,读取结束后再继读取当前的 Makefile ...

  7. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  8. 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )

    1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...

  9. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

    编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...

最新文章

  1. 使用netty模仿dubbo服务
  2. iPhone7p与iPhoneX布局出现右边白边问题
  3. Java注释@interface的用法【转】
  4. java类加载器_类加载器
  5. 简单使用CXF实现webserver(rs的独立发布)
  6. 16-mysql-dml语言-增删改数据
  7. 【英语学习】【WOTD】lacuna 释义/词源/示例
  8. Ant 基本语法的使用示列
  9. 龙星电脑横机制版软件_简用仓库管理软件v8.6.3-简用仓库管理软件电脑版下载...
  10. 硅谷还是程序员的“圣地”吗?
  11. 推理集 —— 物品与动物
  12. java.sql.SQLException: Access denied for user 'Administrator'@'localhost' (using password: YES)
  13. Tomcat发生java.lang.OutOfMemoryError: PermGen space的解决方案
  14. ug安装计算机用户名不能是汉字,win7系统下安装UG软件后打开提示计算机名不对怎么办...
  15. 学计算机的高等数学,高等数学-计算机类
  16. Akka and Actors
  17. android app开机启动画面,Android-如何设置APP开机启动(图文)
  18. .net 发短信案例
  19. 1.01_AFNetworking(4.0.1)源码分析(一)
  20. LabVIEW感兴趣区域分析(实战篇—1)

热门文章

  1. 关于window.history.back()后退问题
  2. 360浏览器兼容问题
  3. core和node开发小程序_node+微信小程序实现商城案例
  4. linux 文件的目录,Linux文件及目录管理
  5. 以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...
  6. android pick file,LFilePicker---文件选择利器,各种样式有它就够了
  7. 红外线遥控c语言程序,红外遥控的C程序
  8. java 连接ldap_ldap java 连接demo
  9. 力扣53. 最大子序和
  10. linux虚拟机ip修改无效