Генерация целевой зависимости make-файла из имени файла в стволе - PullRequest
0 голосов
/ 18 февраля 2011

Привет. У меня есть созданный make-файл, в котором каждый .o представлен как относительный путь к другому каталогу и зависит от файла .cpp в локальном каталоге.Мое понимание проблемы состоит в том, что я не могу использовать функции в определении правила, поэтому правило:

%. O:% .cpp

приводит к предварительному условию .cpp, которое находится втот же каталог, что и .o, который не находится там, где на самом деле находится cpp.Например:

.. / .. / Tmp / MyClass.o: ../../Tmp/MyClass.cpp <--- НЕПРАВИЛЬНО, результат% .o:% .cpp </p>

.. / .. / Tmp / MyClass.o: MyClass.cpp <--- ВПРАВО, как мне сделать это автоматически? </p>

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

OBJS: = $ (addprefix ../../../Tmp/XCode/$ndomPLATFORM}/ $ {CONFIGURATION} /, $ (добавочный суффикс .o, $ (базовое имя $ {SRCS}))))

$ {OUTPUT}: $ {OBJS};$ {AR} $ @ $ {OBJS}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2011

Я думаю, что решение Кристи будет работать, но вот еще один способ сделать то же самое:

# Here's how you do it:
OBJS := $(addprefix ../../../Tmp/XCode/${PLATFORM}/${CONFIGURATION}/, $(addsuffix .o, $(basename ${SRCS})))

# Here's a slightly cleaner way:
BASEPATH = ../../../Tmp/XCode/$(PLATFORM)/$(CONFIGURATION)
OBJS := $(patsubst %.cc,$(BASEPATH)/%.o,$(SRCS))

# And here's the rule:
$(OBJS): $(BASEPATH)/%.o: %.cc
    whatever...
0 голосов
/ 18 февраля 2011

Это должно работать

../../Tmp/%.o: %.cpp

Или используйте переменную

builddir := ../../Tmp
$(builddir)/%.o: %.cpp
...