Files
CS-LABS/lab_6/Makefile
2025-12-10 14:33:23 +07:00

63 lines
2.6 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Makefile для лабораторной: POSIX shared memory + POSIX semaphores. [file:21][web:47]
# Сервер сам чистит старые IPC-объекты и корректно завершает работу. [file:21]
CC = gcc
CFLAGS = -Wall -Wextra -std=c99 -g
LDFLAGS_IPC = -lrt -pthread
# Аргументы IPC: <shm_name> <sem_client_name> <sem_server_name> [iterations]. [file:21]
SHM_NAME ?= /myshm
SEM_CLIENT_NAME ?= /sem_client
SEM_SERVER_NAME ?= /sem_server
SERVER_ITERS ?= 1000
all: shm # Цель по умолчанию: сборка server и client. [file:22]
# ===== Сборка программ POSIX SHM + SEM =====
shm: server client # Группа целей для IPC-программ. [file:21]
server: server.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS_IPC) # Сборка сервера. [file:21][web:47]
client: client.c
$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS_IPC) # Сборка клиента. [file:21][web:47]
# ===== Тесты =====
# Ручной тест: сервер в одном терминале, клиент в другом. [file:22]
test_server: shm
@echo "=== Запуск сервера POSIX SHM+SEM ==="
@echo "В другом терминале выполните: make test_client"
./server $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) $(SERVER_ITERS)
# Клиент: читает input.txt, выводит обработанные строки в stdout. [file:22]
test_client: shm
@echo "=== Запуск клиента, чтение input.txt, вывод на stdout ==="
./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME)
# Автотест: сервер в фоне, клиент один раз читает input.txt. [file:22]
test_all: shm
@echo "=== Автотест POSIX SHM+SEM с файлами input.txt/output.txt ==="
./server $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME) $(SERVER_ITERS) & \
SRV=$$!; \
sleep 1; \
./client $(SHM_NAME) $(SEM_CLIENT_NAME) $(SEM_SERVER_NAME); \
wait $$SRV
# Очистка бинарников и файлов (IPCобъекты чистит сам сервер). [file:21]
clean:
@echo "Очистка..."
rm -f server client
rm -f output.txt
help:
@echo "Available targets:"
@echo " shm - Build POSIX SHM+SEM programs"
@echo " test_server - Run SHM+SEM server (client in another terminal)"
@echo " test_client - Run client reading input.txt"
@echo " test_all - Automatic end-to-end test with input.txt/output.txt"
@echo " clean - Remove built files"
@echo " help - Show this help"
.PHONY: all shm test_server test_client test_all clean help