Добавить внешний файл в файл makefile

61
8

Я новичок в make файлах и стекаю переполнение в этом отношении. Мне было интересно, есть ли способ добавить файл из другого каталога в make файл

Вот пример того, что я хочу сделать:

Дерево файлов:

Software
|____Lab_1
| |____hola.cpp
| |____hola.hpp
| |____hola.o
|
|___Lab_2
|____hey.cpp
|____hey.hpp
|____main.cpp
|____makefile

Мой файл makefile выглядит следующим образом:

INC_DIR = ../Lab_1

all: hola.o hey.o main.o
g++ hola.o hey.o main.o -o prog

point.o: hola.cpp hola.hpp
g++ -c hola.cpp

hey.o: hey.cpp hey.hpp
g++ -c hey.cpp

main.o: main.cpp
g++ -c main.cpp

Я хочу использовать содержимое Lab_1 в файле makefile, который у меня есть в Lab_2, есть ли способ сделать это?

Заранее спасибо.

спросил(а) 2018-12-04T21:25:00+03:00 1 год, 2 месяца назад
1
Решение
77

Поместите свой файл Makefile в каталог Software и используйте переменные, функции, неявные правила и зависимости для автогенерации, чтобы упростить вашу задачу:

TARGET := prog
SOURCE := $(wildcard Lab_1/*.cpp) $(wildcard Lab_2/*.cpp)
OBJECT := $(SOURCE:.cpp=.o)
DEPEND := $(OBJECT:.o=.d)

CPPFLAGS := -MMD -MP -ILab_1

.PHONY: all

all: $(TARGET)

$(TARGET): $(OBJECT)
$(CXX) -o $@ $^

-include $(DEPEND)

Вы новичок, поэтому вам нужно больше узнать, чтобы понять все, но вот суть этого:

    Функция wildcard будет перечислять все файлы с расширением .cpp в обоих каталогах Lab. SOURCE будет содержать Lab_1/hola.cpp Lab_2/hey.cpp Lab_2/main.cpp; Объект OBJECT содержит то же самое, но с заменой расширения на .o; DEPEND содержит то же самое, но с заменой расширения на .d; Переменная CPPFLAGS содержит флаг, используемый препроцессором. -MMD -MP инструктируют g++ (содержится в $(CXX)) для генерации файлов .d (файлы зависимостей), а команда -include будет включать их, если они существуют в файловой системе; $@ И $^ являются автоматическими переменными; в этом контексте, $@= $(TARGET) и $^ = $(OBJECT).

ответил(а) 2018-12-04T21:36:00+03:00 1 год, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема