# 支持通过参数传入CC编译器,默认使用gcc CC ?= gcc CFLAGS = -Wall -Wextra -std=c99 -O2 LDFLAGS = -lssl -lcrypto -lpthread # 目标文件 SERVER_TARGET = tls_server CLIENT_TARGET = tls_client TEST_TARGET = test_long_message SERVER_SOURCE = tls_server.c CLIENT_SOURCE = tls_client.c TEST_SOURCE = test_long_message.c # 默认目标 all: $(SERVER_TARGET) $(CLIENT_TARGET) $(TEST_TARGET) # 编译服务器 $(SERVER_TARGET): $(SERVER_SOURCE) $(CC) $(CFLAGS) -o $(SERVER_TARGET) $(SERVER_SOURCE) $(LDFLAGS) # 编译客户端 $(CLIENT_TARGET): $(CLIENT_SOURCE) $(CC) $(CFLAGS) -o $(CLIENT_TARGET) $(CLIENT_SOURCE) $(LDFLAGS) # 编译测试程序 $(TEST_TARGET): $(TEST_SOURCE) $(CC) $(CFLAGS) -o $(TEST_TARGET) $(TEST_SOURCE) -lssl -lcrypto # 生成证书 cert: chmod +x generate_cert.sh ./generate_cert.sh # 运行服务器(默认端口8443) run: $(SERVER_TARGET) cert ./$(SERVER_TARGET) # 运行服务器(指定端口) run-port: $(SERVER_TARGET) cert @echo "请输入端口号:" @read port; ./$(SERVER_TARGET) -p $$port # 测试客户端 test: $(CLIENT_TARGET) @echo "测试客户端,发送消息 'Hello World'" ./$(CLIENT_TARGET) -m "Hello World" # 测试循环客户端 test-loop: $(CLIENT_TARGET) @echo "测试循环客户端,发送5次消息,间隔2秒" ./$(CLIENT_TARGET) -m "Loop Test" -c 5 -i 2 # 测试TLS 1.2 test-tls12: $(CLIENT_TARGET) @echo "测试TLS 1.2连接" ./$(CLIENT_TARGET) -m "TLS 1.2 Test" -t 1.2 # 测试TLS 1.3 test-tls13: $(CLIENT_TARGET) @echo "测试TLS 1.3连接" ./$(CLIENT_TARGET) -m "TLS 1.3 Test" -t 1.3 # 测试TLS版本对比 test-tls-compare: $(CLIENT_TARGET) @echo "测试TLS版本对比" @echo "=== TLS 1.2 测试 ===" ./$(CLIENT_TARGET) -m "TLS 1.2" -t 1.2 -c 2 -i 1 @echo "" @echo "=== TLS 1.3 测试 ===" ./$(CLIENT_TARGET) -m "TLS 1.3" -t 1.3 -c 2 -i 1 @echo "" @echo "=== 自动协商测试 ===" ./$(CLIENT_TARGET) -m "Auto TLS" -t auto -c 2 -i 1 # 测试并发连接 test-concurrent: $(CLIENT_TARGET) @echo "测试并发客户端连接" @echo "启动2个并发客户端..." ./$(CLIENT_TARGET) -m "Concurrent 1" -c 1 & ./$(CLIENT_TARGET) -m "Concurrent 2" -c 1 & wait @echo "并发测试完成" # 测试长消息 test-long: $(TEST_TARGET) @echo "测试长消息,发送1000字符消息" ./$(TEST_TARGET) 1000 # 清理 clean: rm -f $(SERVER_TARGET) $(CLIENT_TARGET) $(TEST_TARGET) rm -rf cert/ # 安装依赖(Ubuntu/Debian) install-deps: sudo apt-get update sudo apt-get install -y libssl-dev # 安装依赖(CentOS/RHEL) install-deps-centos: sudo yum install -y openssl-devel # 显示编译器信息 info: @echo "当前编译器: $(CC)" @echo "编译选项: $(CFLAGS)" @echo "链接选项: $(LDFLAGS)" # 帮助信息 help: @echo "可用目标:" @echo " all - 编译服务器、客户端和测试程序" @echo " cert - 生成自签名证书" @echo " run - 运行服务器(端口8443)" @echo " run-port - 运行服务器(指定端口)" @echo " test - 测试客户端连接" @echo " test-loop - 测试循环客户端连接" @echo " test-tls12 - 测试TLS 1.2连接" @echo " test-tls13 - 测试TLS 1.3连接" @echo " test-tls-compare - 测试TLS版本对比" @echo " test-concurrent - 测试并发客户端连接" @echo " test-long - 测试长消息发送" @echo " clean - 清理生成的文件" @echo " install-deps - 安装依赖(Ubuntu/Debian)" @echo " info - 显示编译器信息" @echo " help - 显示此帮助信息" @echo "" @echo "编译器参数:" @echo " CC=clang make all - 使用clang编译器" @echo " CC=gcc make all - 使用gcc编译器(默认)" @echo " CC=cc make all - 使用系统默认编译器" .PHONY: all cert run run-port clean install-deps install-deps-centos info help