Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 개발자북클럽
- c++
- 타입스크립트
- DP
- ps
- 다이나믹프로그래밍
- 이코테
- 빅데이터분석
- 백준
- BOJ
- dfs
- 알고리즘
- 이것이코딩테스트다
- 프로그래머스
- 코딩테스트
- 코테
- TS
- 코딩일기
- 이진탐색
- bfs
- 정렬
- 최단경로
- 앱개발
- 구현
- Typescript
- react-native
- 백준온라인저지
- 그리디
- SQL
- 노마드코더
Archives
- Today
- Total
한량처럼 살고 싶다
IDS 프로젝트 - MAKEFILE 작성하기 본문
명령어로 이렇게 한 줄 계속 치면서 실행하니까 손 아파서 메이크파일을 만들었다.
gcc IDS.c queue.c readpacket.c detectpacket.c logpacket.c -o IDS.out -g -lpthread -lpcap -lnsl -D_BSD_SOURCE -lsqlite3
조건
- 컴파일러(CC): gcc
- 컴파일러옵션(CFLAGS): -g -O2 -Wall -D_BSD_SOURCE
- -g: 디버그 정보를 포함하도록 컴파일한다. 프로그램 실행 시 디버깅이 용이하게 됨
- -O2: 최적화 수준, 숫자가 높을수록 더 많은 최적화가 수행되는데 컴파일 시간이 오래걸릴 수 있음
- -Wall: 모든 경고 메세지를 출력한다. (잠재적 오류 해결 가능)
- -D_BSD_SOURCE: 프로그램을 BSD 환경에서 컴파일 할 때 필요한 메크로 정의
- 라이브러리(LIBS)
- - lpthread: 멀티스레드 환경에서 필요한 라이브러리
- - lpcap: 네트워크 패킷을 캡처하고 분석하는데 사용되는 라이브러리
- - lnsl: 소켓 통신 및 네트워크 프로토콜 구현에 사용됨
- - lsqlite3: sqlite3 라이브러리
- 프로세스 실행 순서: preprocess 이후 $(TARGET)
Makefile
위에서 말한 것들을 다 아래에 넣으면 이렇게 된다
.PHONY: all clean preprocess
CC = gcc
CFLAGS = -g -O2 -Wall -D_BSD_SOURCE
LIBS = -lpthread -lpcap -lnsl -lsqlite3
TARGET = IDS.out
SRCS = IDS.c queue.c readpacket.c detectpacket.c logpacket.c
OBJS = $(SRCS:.c=.o)
all: preprocess $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
preprocess:
./check_and_move.sh
clean:
rm -f $(OBJS) $(TARGET)
사실 아직도 저 .PHONY가 이해가 안 간다
- preprocess는 프로그램 실행 전에 먼저 실행되어야 할 파일이다 (하단에 코드 있음)
- $(TARGET): $(OBJS) 제일 위에 있는 한 줄 짜리 명령어를 기호로 치환한 것과 같다
-> gcc [컴파일러 옵션] -o [아웃파일] [의존파일] [라이브러리]
-> $(CC) $(CFLAGS) -o $@ $^ $(LIBS) //여기서 $^는 모든 의존 파일 목록을 의미, 링킹할 오브젝트 파일을 의미한다
- clean: 오브젝트 파일과 타겟파일 (.out)을 없앤다
이게 preprocess 에 있는 쉘 스크립트 -> processed_packets 에서 packets로 파일을 옮긴다
#!/bin/bash
if [ "$(ls -A ./processed_packets)" ]; then
mv ./processed_packets/* packets
fi
실행 방법
make //makefile 실행 (타겟파일 생성)
make clean //옵젝파일 + 아웃파일 삭제
'C C++ > IDS 개발 - C' 카테고리의 다른 글
C언어 해시테이블 구현 (3) | 2024.04.25 |
---|---|
IDS 프로젝트 - 정수로 된 IP주소를 해싱 (0) | 2024.04.25 |
IDS 프로젝트 - 개발 후 유용하게 사용한 함수와 구조체 정리 (0) | 2024.04.19 |