foreach дубликаты включают в make-файл - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь включить некоторые заголовки, используя Makefile.

Вот код, который я сделал:

# Add .h and .hpp to the preprocessor build
HEADERS += $(wildcard src/*.h)
HEADERS += $(wildcard src/*.hpp)
HEADERS += $(wildcard src/**/*.h)
HEADERS += $(wildcard src/**/*.hpp)
INCLUDES = $(foreach HEADERS, $(HEADERS), -I$(dir $(HEADERS)))

# FLAGS will be passed to both the C and C++ compiler
FLAGS +=
CFLAGS +=
CXXFLAGS += $(INCLUDES)

Но как только я собрал, вот что он выполняет:

g++  -Isrc/  -Isrc/  -Isrc/  -Isrc/misc/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/  -Isrc/widgets/ -Wsuggest-override -std=c++11  -DSLUG=NWK -fPIC -I../../include -I../../dep/include -O3 -DVERSION=0.6.4 -MMD -MP -g -march=nocona -ffast-math -fno-finite-math-only -Wall -Wextra -Wno-unused-parameter -DARCH_WIN -D_USE_MATH_DEFINES -c -o build/src/plugins/MyPlug.cpp.o src/plugins/MyPlug.cpp 

Кажется, что для каждого найденного им .h / .hpp он повторяет флаг HEADER.

Как бы вы это исправили?

1 Ответ

1 голос
/ 05 июля 2019

Простое решение - просто пропустить поиск через $(sort ...). В make $(sort ...) удаляет все дубликаты:

INCLUDES = $(sort $(foreach HEADERS, $(HEADERS), -I$(dir $(HEADERS))))

Одно примечание - сортировка меняет порядок включаемых каталогов, что, в свою очередь, изменит порядок поиска каталогов, однако метод, который вы используете для заполнения списков, не зависит от порядка, поэтому у тебя должно быть хорошо.

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