Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c程序的Makefile变量_C_Makefile - Fatal编程技术网

c程序的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

你好,我需要关于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 -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);