2013-11-13 4 views
1

Я относительно новичок в написании файлов и могу использовать некоторые указатели. То, что я пытаюсь достичь, возможно, довольно просто, но после поиска в Интернете я не понимаю, как это сделать.Makefile, модификаторы макросов

Я хотел бы скомпилировать набор объектных файлов из каталога src в каталог сборки, и моя наивная идея заключалась в том, чтобы определить набор исходных файлов в качестве макроса, использовать модификаторы макросов для создания макроса для объектных файлов (так что они должным образом по сравнению с исходными файлами при перекомпиляции Моя текущая схема обозревают создания объектных файлов макросов выглядит как:.

SRCDIR = /some/dir/ 
BUILDDIR = /some/dir/ 
CSRC = \ 
     $(SRCDIR)f1.c \ 
     $(SRCDIR)f2.c \ 

OSRC = $(CSRC,.c=.o,F,<$(BUILDDIR)) 

all: 
    @echo $(OSRC) 

, где все правила просто поставить и проверить, если макрос объектные файлы установлены правильно К сожалению, это не так, вместо этого оно пустое. Замена

OSRC = $(CSRC,.c=.o,F,<$(BUILDDIR)) 

по

OSRC = $(CSRC:.c=.o) 

действительно дает мне макрос объектных файлов, но не с соответствующими каталогами. Таким образом, понимание того, как изменить мой файл, чтобы получить то, что я хочу, будет оценено по достоинству. (Я использую GNU Make 3.82)

ответ

2

Я не уверен, где вы нашли $(CSRC,.c=.o,F,<$(BUILDDIR)); нет ничего даже удаленно, как этот синтаксис в GNU make.

Заявление $(CSRC:.c=.o) заменяет все суффиксы .c на .o, но это не поможет вам, поскольку вы также захотите заменить каталог.

Вы должны использовать $(patsubst ...) функцию:

OSRC = $(patsubst $(SRCDIR)%.c,$(BUILDDIR)%.o,$(CSRC)) 
+0

Да Ваш, бросить курить прямо, после второго взгляда на домашнюю страницу, где я получил синтаксис я понимаю, что это не GNU сделать синтаксис, но Opus сделать, жаль мое замешательство и благодарность за правильный синтаксис с помощью GNU. – cpaitor

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