GNU Make: Как соединить две строки - PullRequest
6 голосов
/ 21 июня 2010

С учетом строки:

program_OBJS := ${program_SRCS:.cpp=.o}

Я хотел бы добавить .o к каждому имени файла вместо замены .cpp на .o.

Как мне это сделать?

Ответы [ 6 ]

9 голосов
/ 21 июня 2010

GNU make имеет добавочный функция

6 голосов
/ 25 июня 2010

Более короткая альтернатива с использованием замены шаблона: program_OBJS := ${program_SRCS:%=%.o}

5 голосов
/ 21 июня 2010

К просто добавить что-то в список элементов, разделенных пробелами, которые вы можете использовать:

program_OBJS := $(foreach program,$(program_SRCS),$(program).o)

Чтобы использовать метод подстановки (как показано в вашем вопросе):

program_OBJS := $(program_SRCS:.cpp=.cpp.o)

, но для этого в списке должно быть достаточно .cpp , иначе замены не произойдут.

3 голосов
/ 04 декабря 2017

Как насчет этого:

STRING1:="foo"
STRING2:="bar"

STRING1:=$(STRING1)$(STRING2)

Очевидно, вы можете сохранить результат в новой переменной.

3 голосов
/ 19 июня 2014

Еще один способ работы вне зависимости от расширения: ${program_SRCS:=.o}

1 голос
/ 21 июня 2010

Просто предположение program_OBJS := ${program_SRCS:.cpp=.cpp.o}

...