У меня есть каталог с именем project
.
Он содержит два подкаталога с именами client
и server
и make-файл с именем Makefile
.
client
и server
получили исходные файлы с именами client.c
и server.c
соответственно.
У меня нет отдельных make-файлов в подкаталогах для источников, принадлежащих этому каталогу. Все сборки выполняются одним make-файлом. Makefile
код
FLAGS = -W -Wall -g -pthread
SERV =./server/server.c #My server code
CLI =./client/client.c #My client code
build:svr cnt
svr: $(SERV)
cc $(FLAGS) $(SERV) -o ./server/server.out
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o ./client/client.out
Теперь я побежал make cnt
, и он ответил
cc -W -Wall -g -pthread ./client/client.c -o ./client/client.out
Проблема в том, что все последующие make cnt
команды заканчивают тем, что компилируют его снова и выводят текст выше, даже если я не изменяю ./client/client.c
Я застрял здесь. Не знаю что делать.
Что я хочу сделать, это:
- С помощью
make cnt
скомпилируйте client/client.c
и выведите его исполняемый файл в каталог client/
- С помощью
make svr
скомпилируйте server/server.c
и выведите его исполняемый файл в каталог server/
.
- И с помощью
make, compile both
server / server.c and
client / client.c` и вывести свои исполняемые файлы в соответствующие каталоги
Но поскольку у меня нет исполняемых файлов с именем svr
, и `cnt проблема, с которой я столкнулся, не решена.
Если я изменю цель на ./client/client.out
вместо cnt
и затем позвоню make client/client.out
, тогда все будет в порядке, именно то, что мне нужно, но я не хочу вводить длинную команду make client/client.out
в моем терминале
Обходной путь, который я получил, выглядит следующим образом
cnt: $(CLI)
cc $(FLAGS) $(CLI) -o cnt
cp cnt ./client/client.out
Но не совсем доволен этим. Я уверен, что то, что я хочу сделать, действительно просто, и должен быть какой-то удобный способ сделать это. Так как я могу это сделать?