Проблемы с Makefile - PullRequest
       3

Проблемы с Makefile

1 голос
/ 30 мая 2020

Я хочу скомпилировать make-файл в linux. Это мой make-файл

FFMPEG_LIBS=    libavdevice                        \
libavformat                        \
libavfilter                        \
libavcodec                         \
libswresample                      \
libswscale                         \
libavutil                          \

LDLIBS := $(shell pkg-config --libs $(FFMPEG_LIBS))
LIBS = -lstdc++fs
PROJECT_ROOT    =   $(shell pwd)

CXX        = g++
CXXFLAGS   = -c -Wall
STRIP      = strip
LDFLAGS    = 
OBJS       = main.o chekfiletoconcat.o
DEPS       = chekfiletoconcat.h 
EXECUTABLE = concat

.PHONY: all
all: $(EXECUTABLE) $(LIBS)

$(EXECUTABLE): $(OBJS)
    $(CXX) $(LDFLAGS) $^ -o $@ $(LDLIBS)
    $(STRIP) $(EXECUTABLE)

%.o: %.cpp $(DEPS)
    $(CXX) $(CXXFLAGS) $<


.PHONY: clean
clean:
    rm -f $(OBJS) $(EXECUTABLE)

Но я получаю ошибку ** make: * Нет правила для создания цели '-lstdc ++ fs', необходимой для 'all'. Стоп.

Ответы [ 3 ]

2 голосов
/ 30 мая 2020

В этой строке правило для all:

all: $(EXECUTABLE) $(LIBS)

переводится в:

all: concat -lstdc++fs

и это то, что вызывает ошибку, поскольку make не знает, как для сборки -lstdc++fs - в конце концов, это компилятор / компоновщик аргумент , а не файл.

Я не думаю, что $(LIBS) должен быть там, он многое больше смысла иметь:

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJS)
    $(CXX) $(LDFLAGS) $^ -o $@ $(LDLIBS) $(LIBS)
    $(STRIP) $(EXECUTABLE)

Другими словами, используйте $(LIBS) флаги для компиляции исполняемого файла, но не в качестве зависимости.

1 голос
/ 30 мая 2020
.PHONY: all
all: $(EXECUTABLE) $(LIBS)

Нет смысла иметь зависимости от ваших библиотек, если вы не собираете их самостоятельно. В вашем случае $(LIBS) не содержал не имя файлов библиотеки, что необходимо для создания из него правила сборки и обеспечения возможности сделать их предварительным условием, но непосредственно имеет "-lxyz" "параметр командной строки для компоновщика. Вы не можете использовать этот формат для deps в Makefile. В вашем случае я бы просто удалил $(LIBS) из вашего правила.

all: $(EXECUTABLE)
0 голосов
/ 30 мая 2020

Я сделал это

LDLIBS := $(shell pkg-config --libs $(FFMPEG_LIBS)) -lstdc++fs
all: $(EXECUTABLE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...