리눅스 c 프로젝트 생성 스크립트(python)

HeungJun Kim·2024년 5월 7일
0

Script

목록 보기
4/5

리눅스에서 c 프로젝트 구조는 일반적으로 아래의 구조를 가진다.

(1) Makefile
(2) 헤더/소스 파일 디렉토리 : src
(3) obj 파일 디렉토리
(4) 출력(바이너리/라이브러리) 파일 디렉토리 : bin

위 구조의 프로젝트를 생성하도록 파이썬 스크립트를 만들었다.(From GPT)

  • create_project.py
import os

def create_project_directories(project_name):
    # 프로젝트 폴더 생성
    os.makedirs(project_name)
    
    # 하위 디렉토리 생성
    subdirectories = ['src', 'bin', 'obj']
    for directory in subdirectories:
        os.makedirs(os.path.join(project_name, directory))
    
    print(f'2. 프로젝트 폴더 및 하위 디렉토리 생성 완료: {os.path.abspath(project_name)}')

def create_main_files(project_name):
    # main.c 파일 생성
    main_c_content = '''
#include <stdio.h>

int main() {
    printf("Hello, world!\\n");
    return 0;
}
'''
    with open(os.path.join(project_name, 'src', 'main.c'), 'w') as f:
        f.write(main_c_content)
    
    # main.h 파일 생성
    main_h_content = '''
#ifndef MAIN_H_
#define MAIN_H_

// 함수 선언 예시
// void my_function();

#endif /* MAIN_H_ */
'''
    with open(os.path.join(project_name, 'src', 'main.h'), 'w') as f:
        f.write(main_h_content)
    
    print('3. main.c 및 main.h 파일 생성 완료')

def create_makefile(project_name):
    # Makefile 내용 작성
    makefile_content = f'''
PROJECT_NAME = {project_name}

CC = gcc
CFLAGS = -Wall -Wextra -std=c99

# 소스 디렉토리 및 하위 디렉토리
SRCDIR := src
OBJDIR := obj
BINDIR := bin

# 소스 파일들을 재귀적으로 탐색하여 추가
SRCS := $(wildcard $(SRCDIR)/*.c)

# 오브젝트 파일들은 obj 디렉토리에 저장
OBJS := $(patsubst $(SRCDIR)/%,$(OBJDIR)/%,$(SRCS:.c=.o))

TARGET := $(BINDIR)/$(PROJECT_NAME)

# Phony targets
.PHONY: all clean

all: $(TARGET)

$(TARGET): $(OBJS)
\t@mkdir -p $(BINDIR)
\t$(CC) $(CFLAGS) $^ -o $@

# Create object files
$(OBJDIR)/%.o: $(SRCDIR)/%.c
\t@mkdir -p $(OBJDIR)
\t$(CC) $(CFLAGS) -c $< -o $@

clean:
\trm -rf $(OBJDIR) $(BINDIR)

# Disable built-in rules
.SUFFIXES:
'''

    # Makefile 생성
    with open(os.path.join(project_name, 'Makefile'), 'w') as f:
        f.write(makefile_content)
    
    print(f'4. Makefile 생성 완료: {os.path.abspath(os.path.join(project_name, "Makefile"))}')

def main():
    # 1. 프로젝트명 입력 받기
    project_name = input("1. 프로젝트 이름을 입력하세요: ").strip()
    
    # 2. 프로젝트명 폴더를 생성하고 하위 디렉토리 생성하기
    create_project_directories(project_name)
    
    # 3. src 폴더 하위에 main.c main.h 파일 생성하고 기본 c 프로그램 예제 코드를 생성하기
    create_main_files(project_name)
    
    # 4. makefile 생성
    create_makefile(project_name)
    
    # 5. 사용방법 출력
    print("5. USAGE\n >>> cd %s\n >>> make\n >>> ./bin/%s" %(project_name,project_name))

if __name__ == "__main__":
    main()

profile
Computer Vision / ADAS / DMS / Face Recognition

0개의 댓글