2013-04-22 1 views
3

Дерево моей рабочей папке:
прочитать переменную из make-файла, в Makefile

. 
|-- work_folder1 
| |-- some.c file 
| |-- Makefile B 
| 
|-- some.c file 
|-- Makefile A 

Мой Makefile Вызов «все» правила в Makefile В. «все» правило Makefile B делает один. o файл с именем «Bo» [$ (NAME)] и скопировать его в рабочую папку (cp ../). Makefile. Скомпилируйте файл .c и свяжите их с «B.o». Но если я решил изменить имя «B.o» в Makefile B, например «my_B.o», Makefile A больше не может компилировать причину «B.o» dosen't.

Как я могу, из Makefile A, читать переменную $ (NAME) в Makefile B?

+0

Мой путь выпускаемая Makefile B первым, чтобы сделать и экспортировать эту величину, а затем прочитать значение в Makefile – MYMNeo

+1

I 'm не эксперт по MAKE, но проще указать 'BNAME' в make-файле A и передать его в makefile B. В зависимости от того, что B на самом деле (целый набор классов, возможно, полное пространство имен или только одно или два класса), этот подход, конечно, более или менее жизнеспособен, так как я предполагаю, что у вас есть хотя бы пара мотов re подкаталоги типа B в вашем проекте. –

+0

@MYMNeo Интересно. Экспортировать значение в файл? – PanzerKadaver

ответ

3

Вы можете добавить специальное правило .PHONY в свой файл Makefile B так, чтобы оно вывело имя, которое вы хотите.

В Makefile В

.PHONY: get_names 

get_names: 
    @echo "B.o" 

В Makefile

B_Files:=$(shell $(MAKE) -C work_folder_B get_names) 

# You can use $(B_Files) that will contain `B.o`. 

Обратите внимание на использование := в Makefile А так, что вы бежите make, чтобы получить имена только один раз.

+0

Hum, когда я пытаюсь выполнить код, команда make возвращает ошибку: ar r libmy.a make: Ввод каталога '/ home/guilma_p/lib/my/Printf 'my_printf.o make: оставить каталог '/ home/guilma_p/lib/my/Printf' /bin/sh: -c: строка 0: неожиданный EOF при поиске соответствия' '' /bin/sh: -c: строка 1: синтаксическая ошибка: неожиданный конец файла make: *** [libmy.a] Ошибка 1 – PanzerKadaver

0

Я нашел его! Огромное спасибо Дидье!

В моем Makefile B:

$(NAME): my_B.o 

PHONY: get_name 

get_name: 
    @echo $(NAME) 

В моем Makefile A:

B_Files:=$(shell make -s -C work_folder_B get_name) 
+0

В случае recur Makefile вам нужно использовать опцию '--no-print-directory' , Например: 'B_Files: = $ (shell make --no-print-directory -C work_folder_B get_name)' – PanzerKadaver

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