# 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: [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