001 makefile的使用

本文介绍如何通过创建Makefile来简化使用GCC编译多个源文件的过程,从而提高编码和调试效率。文章展示了具体的源代码和Makefile内容,并演示了从编译到运行的整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题

标题

当我们有多个源程序时,用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");
    else
      perror("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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值