Переменная makefile для программы c - PullRequest
0 голосов
/ 05 марта 2020

Здравствуйте, мне нужна помощь с переменными make-файла.

make build //(compiler server) 
make run PORT=something //(run server on port something)

Мне нужно сохранить эту переменную и отправить ее на сервер. c и клиент. 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

1 Ответ

1 голос
/ 05 марта 2020

Возможная схема принятия решения о номере порта во время компиляции:

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

и ссылается на PORT, где требуется номер порта.

Если это строго решение во время выполнения, то, возможно, вы используете:

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)

Вы также нужно сказать клиенту подключиться к указанному номеру порта, конечно. У вас все еще должен быть номер порта по умолчанию, который используется как клиентом, так и сервером в каком-то общем заголовке.

Вы можете использовать гибрид этих решений, где вы определяете номер порта по умолчанию в процессе сборки и используете его. в правиле run тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...