Помогите для сборки целей module*.o использовать правила, хранящиеся в каталоге module.
├── module
│ ├── Makefile
│ ├── module1.cpp
│ ├── module1.h
│ ├── module1.o
│ ├── module2.cpp
│ ├── module2.h
│ └── module2.o
├── prog
│ ├── main.cpp
│ ├── main.o
│ ├── Makefile
│ └── prog1
$ cat ./prog/Makefile
CXX=c++
TARGETS=prog1
PROG=./main.cpp
MOD=../module/module1.cpp
.PHONY: module clean
all: $(TARGETS)
module:
$(MAKE) -C ../module CXX=$(CXX)
PMOBJ=$(PROG:.cpp=.o) $(MOD:.cpp=.o)
prog1: $(PMOBJ) $(MOD:.cpp:.h) module
$(CXX) -o $@ $(PMOBJ)
clean:
rm -f $(PROG:.cpp=.o)
rm -f $(MOD:.cpp=.o)
$ cat ./module/Makefile
OBJS=module2.o module1.o
all: $(OBJS)
$(OBJS): %.o: %.cpp %.h
$(CXX) --std=c++11 -c -o $@ $^
сейчас, на примере только module1.o, при вызове make из prog используются правила сборки module1.o по умолчанию. А нужно, чтобы файлы и module собирались по правилам ./module/Makefile:
$ make
c++ -c -o main.o main.cpp
c++ -c -o ../module/module1.o ../module/module1.cpp
make -C ../module CXX=c++
make[1]: Вход в каталог `/home/test/first/module'
make[1]: Цель `all' не требует выполнения команд.
make[1]: Выход из каталога `/home/test/first/module'
c++ -o prog1 ./main.o ../module/module1.o