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

У меня есть этот make-файл

CFLAGS=-g
LDFLAGS=-g

exec: fluxo.o validar.o ficheiroParaMemoria.o

fluxo.o: fluxo.c

validar.o: validar.c validar.h

ficheiroParaMemoria.o: ficheiroParaMemoria.c ficheiroParaMemoria.h

clean:
    rm -f run *.o

Он создает 3 .o файла, но не создает исполняемый файл.У Fluxo.c есть главное и больше ничего.Невидимые отображают только конечную строку в конце каждой строки и табу перед чистой командой

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Исправлено.Необходимо изменить имя «exec» на «fluxo», потому что оно содержит основную функцию

0 голосов
/ 01 марта 2019

Ваш Makefile не содержит никаких правил для сборки исполняемого файла.Это правило является самым близким - оно создает зависимость между этими 3 объектными файлами и целью, называемой "exec".

exec: fluxo.o validar.o ficheiroParaMemoria.o

Если вы хотите собрать "exec" из этих 3 объектных файлов, вам нужно расширитьПравило также включает команду, чтобы сделать это.

exec: fluxo.o validar.o ficheiroParaMemoria.o
    $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

В команде $@ используется для указания цели, поэтому в этом случае будет "exec".$^ являются зависимостями.

Причина, по которой вам не нужно добавлять команды для создания файлов .o, заключается в том, что make включает встроенное правило для сборки файлов .o из файла .c файлато же имя.Существует также встроенное правило для сборки исполняемого файла из .o или .c с тем же именем, но в этом случае это не очень полезно, так как он не будет включать другие 2 .o файла

Кроме того, LDFLAGS обычно используется для указания параметров компоновки, а не параметров компиляции, поэтому вам не нужно указывать "-g"

0 голосов
/ 01 марта 2019

Извините, я не понимаю ваш Makefile, но вот работает Makefile из моего проекта:

CC = gcc
FLAGS = -std=c99
DEST_PATH = "./bin/main"


all: clean main.o Smtp.o Base64.o
    $(CC) build/*.o -o $(DEST_PATH) $(FLAGS)

main.o: src/main.cpp src/Service/Smtp.hpp
    $(CC) src/main.cpp -c -o build/main.o $(FLAGS)

Smtp.o: src/Service/Smtp.cpp src/Service/Smtp.hpp
    $(CC) src/Service/Smtp.cpp -c -o build/Smtp.o $(FLAGS)

Base64.o: src/Service/Base64.cpp src/Service/Base64.hpp
    $(CC) src/Service/Base64.cpp -c -o build/Base64.o $(FLAGS)

clean:
    rm -f build/*

-c флаг создания объектного файла (.o).
В вашем примере я не вижу никакихнастоящая команда, кроме rm.
Надеюсь, эта помощь.

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