c程序的Makefile变量
你好,我需要关于makefile变量的帮助c程序的Makefile变量,c,makefile,C,Makefile,你好,我需要关于makefile变量的帮助 make build //(compiler server) make run PORT=something //(run server on port something) 我需要保存这个变量并发布到server.c和client.c这是我的Makefile SERVER=server CLIENT=client FILES=src/server.c src/client.c CFLAGS=-std=gnu99 -Wall -Wextra -We
make build //(compiler server)
make run PORT=something //(run server on port something)
我需要保存这个变量并发布到server.c和client.c这是我的Makefile
SERVER=server
CLIENT=client
FILES=src/server.c src/client.c
CFLAGS=-std=gnu99 -Wall -Wextra -Werror -pedantic
CC=gcc
build:
$(CC) $(CFLAGS) -o $(SERVER) src/server.c
$(CC) $(CFLAGS) -o $(CLIENT) src/client.c
run:
./server
clean:
$(RM) *.o src/$(CLIENT) src/$(SERVER
关于端口号的编译时决策的合理轮廓可能是:
SERVER = server
CLIENT = client
SERVER.c = src/server.c
CLIENT.c = src/client.c
CFLAGS = -std=gnu99 -Wall -Wextra -Werror -pedantic
PORT = 9823
DFLAGS = -DPORT=$(PORT)
CC = gcc
all: build
build: $(CLIENT) $(SERVER)
$(CLIENT): $(CLIENT.c)
$(CC) $(CFLAGS) $(DFLAGS) -o $(CLIENT) $(CLIENT.c)
$(SERVER): $(SERVER.c)
$(CC) $(CFLAGS) $(DFLAGS) -o $(SERVER) $(SERVER.c)
run: $(CLIENT) $(SERVER)
./$(SERVER)
clean:
$(RM) *.o $(CLIENT) $(SERVER)
客户端和服务器的代码包含这样的代码,最好在公共头中:
#ifndef PORT
#define PORT 1234
#endif
和引用需要端口号的端口
如果严格来说这是一个运行时决策,那么您可能会使用:
SERVER = server
CLIENT = client
SERVER.c = src/server.c
CLIENT.c = src/client.c
CFLAGS = -std=gnu99 -Wall -Wextra -Werror -pedantic
PORT = 9823
CC = gcc
all: build
build: $(CLIENT) $(SERVER)
$(CLIENT): $(CLIENT.c)
$(CC) $(CFLAGS) -o $(CLIENT) $(CLIENT.c)
$(SERVER): $(SERVER.c)
$(CC) $(CFLAGS) -o $(SERVER) $(SERVER.c)
run: $(CLIENT) $(SERVER)
./$(SERVER) -p $(PORT)
clean:
$(RM) *.o $(CLIENT) $(SERVER)
当然,您还需要告诉客户端连接到给定的端口号。您仍然应该有一个默认端口号,该端口号由客户端和服务器在某个公共头中共享
您可以使用这些解决方案的混合,在构建过程中定义默认端口号,并在
运行规则中使用它。那么您希望如何将变量输入到C程序中呢?是否使用getenv()将其作为环境变量获取?还是在命令行上期待它?这里没有代码,因此无法告诉您正在尝试做什么。正如前面提到的,我们不知道您打算让程序如何读取变量。如果从命令行参数中,您只需将运行
命令更改为/server“$(PORT)”
,因此我希望读取此变量而不是整数,并为控件写入printf(“PORT是%d”,PORT);