Makefile 학습 1

4197 단어 linuxmakefile
최근 에 nginx 를 배우 고 있 습 니 다. 실제 Liux 에서 일부 코드 는 Makefile 파일 로 컴 파일 해 야 하기 때문에 시간 을 절약 할 수 있 습 니 다.nginx 에 새로운 모듈 을 추가 하기 때문에.이번 에는 nginx 를 배 우 는 동시에 Liux 프로 그래 밍 을 배우 기로 했 습 니 다. 물론 Makefile 을 배 울 필요 가 있 습 니 다.
gcc 컴 파일 과정:
(1) 전처리: test. i 파일 생 성
# cpp test.c-o test.i   //혹은
# cpp test.c > test.i    //혹은
# gcc -E test.c -o test.i
 
(2) 컴 파일: test. s 파일 생 성
# gcc -S test.i
 
(3) 어 셈 블 리: test. o 파일 생 성
# as -o test.o test.s    //혹은
# gcc -c test.s -o test.o
 
(4) 링크: 실행 가능 한 파일 생 성 test
# gcc -o test test.o
예:
##         
gcc -E test.c -o test.i #   
gcc -S test.i -o test.s #  
gcc -c test.s -o test.o #  
gcc -o test test.o      #link

Makefile 의 첫 번 째 예:
main. c 의 코드:
#include <stdio.h>
#include <stdlib.h>
#include "print.h"
#include "computer.h"

int main()
{
    print("xxxx");
    printf("%d
", ret_add(1, 2)); return 0; }

print. h 코드:
#include <stdio.h>

void print(const char *str);

print. c 의 코드:
#include "print.h"

void print(const char *str)
{
   if (str == NULL) 
   {
      printf("Empty String
"); } else { printf("%s
", str); } }

computer. h 코드:
int ret_add(int a, int b);

computer. c 의 코드:
#include "computer.h"

int ret_add(int a, int b)
{
   return a+b;
}

main. c 를 Makefile 로 컴 파일 합 니 다:
main : main.o print.o computer.o
       gcc -o main main.o print.o computer.o
main.o : main.c print.h computer.h
       gcc -c main.c
print.o : print.c print.h
       gcc -c print.c
computer.o : computer.c computer.h
       gcc -c computer.c

명령 make - f mymakename
주의 하 세 요. 가끔 다음 과 같은 실 수 를 보고 할 수 있 습 니 다.
makefile:11: ***       。   .

이것 은 gcc 명령 이 TAB 로 시작 되 기 때문에 모든 gcc 명령 전에 TAB 키 를 추가 해 야 합 니 다.
이상 ":" 왼쪽 은 모두 목표 파일 이 라 고 부 릅 니 다. copter. o print. o main. o main 은 모두 목표 파일 이지 만 하나의 Makefile 은 하나의 최종 목표 파일 만 있 습 니 다. 다른 목표 파일 은 모두 이 최종 목 표를 위해 서 비 스 를 제공 합 니 다. main 은 최종 목표 이 고 다른 목 표 는 최종 목표 main 또는 main 은 다른 목표 에 의존 합 니 다.
":" 오른쪽 은 왼쪽 목 표를 만 들 기 위해 의존 해 야 할 파일 입 니 다. copter. o 의 생 성 은 예비 copter. c copter. h 에 의존 합 니 다. main. o 의 생 성 은 main. c print. h 에 의존 합 니 다.  couputer. h 등
유용 한 변수 들:
$@ 대상 파일 입 니 다. 예 를 들 어 computer. o print. o main. o main
$^ 모든 의존 파일. 예 를 들 어 main. o 의 모든 의존 파일 은 main. c print. h 입 니 다.  couputer.h
$< 모든 의존 파일 의 첫 번 째 파일 입 니 다. 예 를 들 어 main. o 가 의존 하 는 첫 번 째 파일 은 main. c 입 니 다.
그래서 Makefile 은 이렇게 쓸 수 있 습 니 다.
main : main.o print.o computer.o	
	gcc -o $@ $^	
main.o : main.c print.h computer.h	
	gcc -c $<	
print.o : print.c print.h	
	gcc -c $<	
computer.o : computer.o computer.h
	gcc -c $<

자동 푸 시 메커니즘
makefile:
main : main.o print.o 
computer.o
	gcc -o main main.o print.o computer.o
main.o : print.h computer.h
print.o : print.h
computer.o : computer.h

make 는 대상 파일 에 따라 필요 한 c (. h?) 파일 로 자동 으로 밀어 내 고 gcc 를 호출 하여 컴 파일 합 니 다. print. o 라 는 목표 보다 make 는 copter. c 라 는 파일 이 필요 하고 gcc 로 컴 파일 해 야 한 다 는 것 을 알 고 있 습 니 다.
사용 변수
makefile
objects = main.o 
print.o computer.o
main : $(objects)
	gcc -o main $(objects)
main.o : main.c print.h computer.h
	gcc -c main.c
print.o : print.c print.h
	gcc -c print.c
computer.o : computer.c computer.h
	gcc -c computer.c
.PHONY: clean
clean:
	-rm main $(objects)

makefile 에 서 는 변 수 를 사용 할 수 있 습 니 다. 예 를 들 어 변 수 를 사용 하여 대상 파일 을 저장 할 수 있 습 니 다. < / p >
변 수 를 사용 하 는 장점 은 변 수의 값 을 수정 할 수 있 습 니 다. 예 를 들 어 하나의 변 수 를 depend = main. c print. h copt. h 로 정의 하여 main. o 의 의존 항목 을 저장 할 수 있 습 니 다. main. o 의 의존 항목 이 증가 하거나 감소 할 때 depend 라 는 변수 만 수정 하면 됩 니 다.
예 를 들 어 우 리 는 파일 create. h 를 추가 합 니 다. 우 리 는 depend 이후 에 이 파일 이름 을 추가 하면 됩 니 다. 이것 은 큰 프로젝트 에서 시간 을 절약 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기