make

이전것/LINUX 2016. 4. 4. 18:42

나눠진 C파일을 한번에 컴파일

$ vi Makefile

// number라는 이름의 실행파일을  만들기 위해서는  : 아래가 필요하다. Target:Dep1 Dep2

number: one.o two.o main.o 

gcc -o number one.o two.o main.o

one.o : one.c first.h second.h

gcc -c one.c 

two.o : two.c second.h third.h

gcc -c two.c

main.o : main.c first.h

gcc -c main.c

clean:

rm number

rm one.o two.o main.o


$ make


$ make clean


CC = gcc // 변수명 CC = gcc

TARGETS = number

SOURCES = one.c two.c main.c

OBJECTS = one.o two.o main.o

CFLAGS = -02 -Wall

INCLUDE = -I.경로명  // 특정위치에 헤더 파일이 있다.

all: $(TARGETS)


$(TARGETS): $(OBJECTS)                

$(CC) $(CFLAGS) $(INCLUDE) -o $(TARGETS) $(OBJECTS)  

$(OBJECTS) :$(SOURCES)

$(CC) $(CFLAGS) $(INCLUDE) -c $(SOURCES)

#one.o : one.c first.h second.h

#$(CC) -c one.c 

#two.o : two.c second.h third.h

#$(CC) -c two.c

#main.o : main.c first.h

#$(CC) -c main.c

clean:

rm number

rm one.o two.o main.o


오브젝트 파일을 하나로 묶어서 라이브러리로 만드는 방법


라이브러리

: 정적 라이브러리 

: 현재 라이브러리를 묶어서 내가 만든 소스코드에 포함시켜서 컴파일을 하는 것

: 동적 라이브러리

: 라이브러리 자체가 컴파일을 할때 참조를 하여 위치값만 읽어들여 컴파일을 하는 것


정적 라이브러리

$ ar

 r: 추가

c: 생성

s: index 생성

x: 추출

d: 제거

v: 보여줌

libmynumber.a // 정적 라이브러리의 확장자는 .a 동적 라이브러리는 .so

libxxx.so

cd - // 이전 디렉토리로 ㄱㄱ

$ ar rcsv libmynumber.a one.o two.o

: one.o two.o 를 정적 라이브러리로 묶음

$ ar t libmynumber.a

: libmynumber.a 의 포함된 오브젝트 파일을 표시

$ gcc -o stnumber main.c -L.libmynumber.a

: 현재 라이브러리를 -L. 옵션으로 경로 지정

$ ./stnumber

: 정적 라이브러리이기 때문에 라이브러리를 지워도 실행이 된다.


동적 라이브러리

$ gcc -c -fPIC one.c two.c


| 명령어 | 컴파일 | 동적라이브러리 코드분리 생성 | 소스이름|


$ gcc -o dynumber main.c -L. libnyshared.so


| 명령어 | 오브젝트 | 실행파일 이름 | 소스이름 | 라이브러리 경로이름|

cp libmyshared.so /lib 

: /lib 로 라이브러리 이동

'이전것 > LINUX' 카테고리의 다른 글

device driver (2)  (0) 2016.05.16
device driver  (0) 2016.05.09
압축  (0) 2016.03.21
퍼미션  (0) 2016.03.21
링크파일  (0) 2016.03.21
블로그 이미지

잉비니

,