#!/bin/bash
# Vérifie si un nom de projet est fourni
if [ $# -eq 0 ]; then
echo "Usage: $0 <nom_projet>"
exit 1
fi
PROJECT_NAME=$1
SRC_DIR="src"
INC_DIR="inc"
BIN_DIR="bin"
# Crée l'arborescence du projet
mkdir -p "$PROJECT_NAME"
cd "$PROJECT_NAME" || exit
mkdir -p "$SRC_DIR" "$INC_DIR" "$BIN_DIR"
# Crée le fichier main.c
cat > "$SRC_DIR/main.c" <<EOF
#include <stdio.h>
#include <stdlib.h>
#include "${PROJECT_NAME}.h"
int main(int argc, char *argv[])
{
printf("Hello, ${PROJECT_NAME}!\\n");
return EXIT_SUCCESS;
}
EOF
# Crée le fichier header
cat > "$INC_DIR/${PROJECT_NAME}.h" <<EOF
#ifndef ${PROJECT_NAME^^}_H
#define ${PROJECT_NAME^^}_H
/* Prototypes des fonctions */
void ${PROJECT_NAME}_hello(void);
#endif
EOF
# Crée un fichier source supplémentaire
cat > "$SRC_DIR/${PROJECT_NAME}.c" <<EOF
#include <stdio.h>
#include "${PROJECT_NAME}.h"
void ${PROJECT_NAME}_hello(void)
{
printf("Function from ${PROJECT_NAME}\\n");
}
EOF
# Crée le Makefile
cat > Makefile <<EOF
CC = gcc
CFLAGS = -Wall -Wextra -Iinc/
LDFLAGS =
TARGET = bin/${PROJECT_NAME}
SRC = \$(wildcard src/*.c)
OBJ = \$(patsubst src/%.c,bin/%.o,\$(SRC))
all: \$(TARGET)
\$(TARGET): \$(OBJ)
\$(CC) \$(LDFLAGS) -o \$@ \$^
bin/%.o: src/%.c
\$(CC) \$(CFLAGS) -c -o \$@ \$<
clean:
rm -f bin/*.o \$(TARGET)
.PHONY: all clean
EOF
echo "Projet C '${PROJECT_NAME}' créé avec succès !"
echo "Arborescence :"
tree