Makefile - удалить ../ из пути - PullRequest
9 голосов
/ 16 марта 2012

У меня есть объектные файлы с путями, которые могут выглядеть следующим образом:

 '../../src/foo/bar.c'

Я бы хотел, чтобы они выводились на

 'build/src/foo/bar.o'

В настоящее время используется:

 COBJS      :=  $(notdir $(CFILES))
 COBJS      :=  $(patsubst %,$(BUILD)%.o,$(COBJS))

Я могу достичь

 'build/bar.o'

Это проблематично, если любые две библиотеки / проекта содержат одно и то же имя класса.

Итак, вопрос в том, как можно удалить несколько «../» из пути в Make. Я пробовал очевидные и наивные подходы безрезультатно.

Обновите, следующее будет точно соответствовать ../../ и заменит его на остальные. Это идеально, за исключением того, что это специфично для ../../. Просто нужно, чтобы оно совпадало с любым количеством ../../

 COBJS      :=  $(CFILES:../../%=%)

Обновление

РЕШЕНО, только три репутации стесняются опубликовать свой ответ.

 COBJS      :=  $(subst ../,,$(CFILES))

Ответы [ 3 ]

2 голосов
/ 21 февраля 2014

Как написано в моем исходном вопросе, и я забыл со временем ответить.

Решение для этой и, вероятно, многих других замен строки Make:3 параметра.$ toMatch, $ replaceWith, $ string.

В этом случае $ (CFILES) - это список всех файлов .c для компиляции.Я заменяю '../' ничем.

1 голос
/ 16 марта 2012

Попробуйте abspath .

COBJS := $(foreach file,${CFILES},$(abspath ${file}))
0 голосов
/ 05 октября 2015

Простое решение вашей проблемы может быть следующим. Рассмотрим простой Makefile

path_to_remove := batch1/test2
path_to_add := earth/planet

my_paths := \
batch1/test2/p/a3.c \
batch1/test2/p/a2.c \
batch1/test2/p/a1.c  \
batch1/test2/q/b3.c \
batch1/test2/q/b2.c \
batch1/test2/q/b1.c

$(info [Original] [$(my_paths)])
my_paths := $(my_paths:$(path_to_remove)/%=$(path_to_add)/%)
$(info [New Changed] [$(my_paths)])

all:
    @echo "Hi Universe"

Когда вы запускаете команду make.

make

Вы получите результат как:

[Original] [batch1/test2/p/a3.c batch1/test2/p/a2.c batch1/test2/p/a1.c batch1/test2/q/b3.c batch1/test2/q/b2.c batch1/test2/q/b1.c]
[New Changed] [earth/planet/p/a3.c earth/planet/p/a2.c earth/planet/p/a1.c earth/planet/q/b3.c earth/planet/q/b2.c earth/planet/q/b1.c]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...