2017-02-14 3 views
0

Я пытаюсь построить мой проект из верхнего каталога, в котором есть подкаталоги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. Поскольку я хочу написать похожие строки для app1app2 и app3 Я хочу решить эту проблему.

Заранее благодарен!

ответ

1

Вам необходимо объявить зависимости ваших приложений в своих целях.

Если app1, app2 и app3 зависят от lib1.a и lib2.a, вам также необходимо написать эти зависимости в своей цели. То же самое для ваших библиотек (на всякий случай, если есть какие-либо зависимости, существующие между обеими библиотеками).

Например:

LIBS = lib1.a lib2.a 
SRC = app1.cc 
app1: $(SRC) $(LIBS) # you will say app1 depends on its source and the libs 
    # compile your app 
+1

Спасибо. Я закончил тем, что использовал фальшивую цель, такую, что 'phony: lib1.a lib2.a app1 app2 app3' – namesake22

+0

Правильно, также хорошая идея. Спасибо, что поделились ею! – KimKulling

Смежные вопросы