как связать AC-файл с двумя исполняемыми файлами - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть файл с именем wrapsock.c, в котором есть несколько функций-оболочек для заголовочного файла socket.h.У меня есть два исполняемых файла, FTP_client и FTP_server, которые оба должны использовать файл wrapsock.c.У меня проблемы с моим make-файлом, чтобы связать файл wrapsock.c с обеими этими программами

Вот мой make-файл ниже:

all: ./bin/FTP_client ./bin/FTP_server

bin/FTP_client: main_client.o wrapsock.o
    gcc -o bin/FTP_client main_client.o wrapsock.o -lpthread -g
    mv main_client.o ./bin
    mv wrapsock.o ./bin

bin/FTP_server: main_server.o wrapsock.o
    gcc -o bin/FTP_server main_server.o wrapsock.o -lpthread -g
    mv main_server.o ./bin
    mv wrapsock.o ./bin

main_client.o: src/main_client.c
    gcc -c src/main_client.c -g

wrapsock.o: src/wrapsock.c src/wrapsock.h
    gcc -c src/wrapsock.c -g

main_server.o: src/main_server.c
    gcc -c src/main_server.c -g

clean:
    rm ./bin/*.o
    rm ./bin/FTP_client
    rm ./bin/FTP_server

Это ошибка, которую я получаю:

gcc -c src/main_client.c -g
gcc -c src/wrapsock.c -g
gcc -o bin/FTP_client main_client.o wrapsock.o -lpthread -g
mv main_client.o ./bin
mv wrapsock.o ./bin
gcc -o bin/FTP_server main_server.o wrapsock.o -lpthread -g
gcc: error: wrapsock.o: No such file or directory
make: *** [makefile:9: bin/FTP_server] Error 1

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Не уверен, почему вы перемещаете бинарные объекты в bin/, но после того, как вы построили свою клиентскую цель, wrapsock.o больше не находится в корне проекта и вместо этого находится в bin/, поэтому, когда цель сервера получает свою очередьGCC больше не может его найти.Я бы просто отказался от ходов или, если есть причина для их выполнения, сделал бы это в отдельной цели, которая выполняется только после того, как оба двоичных файла были построены (т.е. перечисляет их как предварительные условия).

0 голосов
/ 03 февраля 2019
mv wrapsock.o ./bin
gcc -o bin/FTP_server main_server.o wrapsock.o -lpthread -g
gcc: error: wrapsock.o: No such file or directory

Чтобы переместить объект не очень хорошо, создайте объекты непосредственно в корзину, как вы делаете для исполняемого файла:

all: ./bin/FTP_client ./bin/FTP_server

bin/FTP_client:  bin/main_client.o  bin/wrapsock.o
    gcc -o bin/FTP_client bin/main_client.o bin/wrapsock.o -lpthread -g

bin/FTP_server:  bin/main_server.o  bin/wrapsock.o
    gcc -o bin/FTP_server  bin/main_server.o  bin/wrapsock.o -lpthread -g

bin/main_client.o: src/main_client.c
    gcc -c src/main_client.c -g -o bin/main_client.o

bin/wrapsock.o: src/wrapsock.c src/wrapsock.h
    gcc -c src/wrapsock.c -g -o bin/wrapsock.o

bin/main_server.o: src/main_server.c
    gcc -c src/main_server.c -g -o bin/main_server.o

clean:
    rm ./bin/*.o
    rm ./bin/FTP_client
    rm ./bin/FTP_server
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...