я пытаюсь сделать Make файл, (отдельная компиляция), но компилятор выдает мне эту ошибку

здесь ошибка:

make: *** No rule to make target 'stringFunction.o', needed by 'stringsmake'.  Stop.

и вот мой make.mak:

  # Dateiname: stringsmake.mak

stringsmake: stringFunction.o stringMain.o                                                  
        gcc -o stringsmake stringFunction.o stringMain.o

stringFunctions.o: stringFunctions.h stringFunctions.c                                                                           
        gcc -c stringFunctions.c

stringmain.o: stringFunctions.h Stringmain.c                                                             
        gcc -c Stringmain.c

adersat

Ответов: 2

Ответы (2)

Приведенный ниже Makefile должен выполнить эту работу. Но измените stringFunctions.c на stringFunction.c и Stringmain.c на stringMain.c.

BASE = stringsmake
CXX = gcc
LIBFLAGS=-lm

main: $(BASE)

%.o: %.cc
      $(CXX) -c -o$@ $<

$(BASE): stringFunctions.o stringMain.o
      $(CXX) -o $@ $^ $(LIBFLAGS)

stringFunctions.o: stringFunctions.h
stringMain.o: stringFunctions.h

У вас много несоответствий между разными именами файлов. Как в написании, так и в верхнем и нижнем регистре.

Я предлагаю вам научиться использовать неявные правила, автоматические переменные и "стандартные" переменные для создания более простых makefiles.

Пожалуй, что-то вроде этого:

# Standard flag for C source compilations
# Add option for extra warnings
CFLAGS = -Wall

# The main target
mystring: Stringmain.o stringFunctions.o
    $(CC) -o $@ $^

Вот и все. Существуют неявные правила построения объектных файлов из исходных файлов C с помощью переменной CFLAGS.

Автоматическая переменная $@ расширяется до текущей цели, а переменная $^ расширяется до всех предпосылок. Таким образом, $(CC) -o $@ $^ расширится до $(CC) -o mystring Stringmain.o stringFunctions.o.

Вы можете добавить явные правила, чтобы перечислить зависимости (например, заголовочные файлы), но опустить любую команду. Тогда неявные правила будут использоваться для генерации объектных файлов.

Пожалуйста, уделите некоторое время изучению руководства к программе make, которую вы используете (например, GNU Make).

2022 WebDevInsider