標題
標題
當我們有多個源程序時,用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;
}