Я пытаюсь построить мой проект из верхнего каталога, в котором есть подкаталогиMakefile из верхней библиотеки
root
Makefile
| common/
| lib/
| app1/
| app2/
| app3/
Предположение 1: Я в корневом каталоге
Предположение 2: Каждый подкаталог имеет свой собственный Makefile
Предположение 3: Makefile Рута фактически не дает никакого выхода, он только хочет, чтобы выполнить Makefiles в подкаталогах
Допущение 4 : common/
и lib/
будет содержать файлы библиотек lib1.a
и lib2.a
Теперь, запустив make
в корне, я хочу сначала построить две библиотеки lib1.a
и lib2.a
. И затем я хочу создать соответствующие приложения в app1/
, app2/
и app3/
. 3 приложения должны быть связаны с lib1.a
и lib2.a
.
Я нахожусь на том этапе, когда хочу сначала построить две библиотеки, называя их Makefiles соответственно. Вот что я до сих пор.
CFLAGS = -Wall -pedantic -std=c11 -ggdb
CC = gcc
MAKE = make
LIBPATH = lib/
COMMONPATH = common/
$(LIBPATH)lib1.a : $(LIBPATH)lib1.a # i know this isn't appropriate but it executes make
$(MAKE) -C $(LIBPATH)
$(COMMONPATH)lib2.a : $(COMMONPATH)lib2.a
$(MAKE) -C $(COMMONPATH)
Я знаю, что есть, вероятно, более эффективные способы написать это, но главная проблема для меня является то, что это Makefile выполняет только то, что является первым. Теперь он будет рекурсивно запускать make-файл lib1.a
, но не для lib2.a
. Поскольку я хочу написать похожие строки для app1
app2
и app3
Я хочу решить эту проблему.
Заранее благодарен!
Спасибо. Я закончил тем, что использовал фальшивую цель, такую, что 'phony: lib1.a lib2.a app1 app2 app3' – namesake22
Правильно, также хорошая идея. Спасибо, что поделились ею! – KimKulling