LINUX.ORG.RU

Использование строковых функий в указании зависимостей для целей

 ,


0

1

Ребят, возник такой вот вопрос.

Допустим, есть файл src/Test/Test.cpp. После компиляции хочу получить src_Test_Test.o.

Предварительно в makefile я получаю конечное имя объектников.

Для возврата к полному имени (с именами директорий) пишу такую вот вещь:

%.o : $(subst _,/,%.cpp)
     <...>

Собственно вопрос: можно ли вообще такое творить? Просто make выдаёт, что нет.

Или есть альтернивы подобному?

Use automake.

anonymous
()

можно, только я бы сделал так:

VAR := $(subst ...)
%.o: $(VAR)
    ...

так эстетичнее.

ну и покажи ошибку make, возможно просто не правильно используешь subst

IvanR ★★★
()
Ответ на: комментарий от IvanR

Чего можно? Ему наоборот надо, чтобы сабст был принят символически и разворачивался только в момент инстанциации правила.

anonymous
()
Ответ на: комментарий от anonymous

тогда это что-то не то, надо быть проще.

IvanR ★★★
()

запустить шелловскую команду, формирующую нужное имя

anonymous
()
Ответ на: комментарий от anonymous

Ну да, почти. Правда особой силы не сыграло.

$(Objects): $(ObjPath)/%.o : $(subst _,/,%.cpp)
	$(CC) $(Flags) $(Flag_Obj) $(Libs) -c $< -o $@
make: *** Нет правила для сборки цели «src_Test_Test.cpp», требуемой для «obj/src_Test_Test.o».  Останов.

По идее, на место процента должна была подставиться строка с именем файла. Но нет.

Или я не правильно всё понимаю? Просто в таком виде всё работает:

$(ObjPath)/%.o :
	$(CC) $(Flags) $(Flag_Obj) $(Libs) -c $(subst _,/,$(notdir $(subst .o,.cpp,$@))) -o $@
kachsheev ★★★
() автор топика
Последнее исправление: kachsheev (всего исправлений: 1)
Ответ на: комментарий от kachsheev

Ресолвинг процентов в шаблоне это как бы stage-2 после ресолва всех значений переменных, но это не сакральное знание, просто так совпало, что я изначально так думал. Наверное в доках упомянуто. То, что ты хочешь, в общем виде называется build folder, могу разве что еще погуглить, сам хз, тем более с переименованием в шаблоне.

Из опыта могу сказать, что сложные мейкфайлы того не стоят, если сильно нужно «как в ide», то копай в сторону к-н cmake или вообще strace-мемойзеров.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.