Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Makefile

3 views
Skip to first unread message

Dmitry E. Oboukhov

unread,
Jan 15, 2008, 9:57:35 AM1/15/08
to
может не совсем та эха, но ввсе же

есть makefile

SRC = p1/a.c p2/b.c p3/c.cpp d.cpp p4/e.c p5/f.c p6/g.cpp

нужно собрать переменноую OBJ чтобы каждому исходному файлу
соответствовал .o в том же каталоге

OBJ1 = $(SRC:%.c=%.o)
OBJ = $(OBJ1:%.cpp=%.o)

так работает, но с использованием временной переменной

OBJ = $($(SRC:%c=%.o):%.cpp=%.o)

а так не работает

как красиво сделать без промежуточных переменных и шелла?

... Мы хлещем в жару портвейн! Мы не греем пива зимой!

Nickita A Startcev

unread,
Jan 15, 2008, 4:56:40 PM1/15/08
to
Привет, Dmitry !


15 Jan 08 , 17:57 Dmitry E. Oboukhov писал к All:

DEO> есть makefile

DEO> SRC = p1/a.c p2/b.c p3/c.cpp d.cpp p4/e.c p5/f.c p6/g.cpp

DEO> нужно собрать переменноую OBJ чтобы каждому исходному файлу
DEO> соответствовал .o в том же каталоге

DEO> OBJ1 = $(SRC:%.c=%.o)
DEO> OBJ = $(OBJ1:%.cpp=%.o)

DEO> так работает, но с использованием временной переменной

DEO> OBJ = $($(SRC:%c=%.o):%.cpp=%.o)

DEO> а так не работает

DEO> как красиво сделать без промежуточных переменных и шелла?

если мне склероз не изменяет,
OBJ = $(patsubst src/ out/ $(patsubst .c .o $(wildcard src/*.cpp)))

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

. С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... Press Shift + Reset to continue

Aleksey Cheusov

unread,
Jan 22, 2008, 6:43:07 AM1/22/08
to
DEO> как красиво сделать без промежуточных переменных и шелла?

Красиво - это примерно так ;) Hе изобретая очередных велосипедов.

-----------------------------------------------------
PREFIX?=/usr/local
BINDIR?=${PREFIX}/bin
MANDIR?=${PREFIX}/man

PROG= yourprog
SRCS= a.c b.c c.c d.c

.include <bsd.prog.mk>
-----------------------------------------------------

Вот и весь твой Makefile. Он уже умеет all, install, clean и так
далее, и, в отличие от 99% самопала, все делает правильно.
gnu make и идиотский automake в топку. Hужен pmake или make любой(?) *BSD.

--
Best regards, Aleksey Cheusov.

Dmitry E. Oboukhov

unread,
Jan 22, 2008, 7:15:24 AM1/22/08
to
DEO>> как красиво сделать без промежуточных переменных и шелла?

AC> Красиво - это примерно так ;) Hе изобретая очередных велосипедов.

AC> -----------------------------------------------------
AC> PREFIX?=/usr/local
AC> BINDIR?=${PREFIX}/bin
AC> MANDIR?=${PREFIX}/man

AC> PROG= yourprog
AC> SRCS= a.c b.c c.c d.c

AC> .include <bsd.prog.mk>
AC> -----------------------------------------------------

AC> Вот и весь твой Makefile. Он уже умеет all, install, clean и так
AC> далее, и, в отличие от 99% самопала, все делает правильно.
AC> gnu make и идиотский automake в топку. Hужен pmake или make любой(?) *BSD.

ну если бы я прогу писал то я бы так и сделал :)
но тут вообще код чужой
и выглядит он примерно так:

SRC = список файлов на два экрана \
сишных и иногда \
встречающихся сиплюсплюсных

OBJ = список объектных файлов \
соответсвующих SRC

ну и в SRC включено кой что лишнего
я это лишнее удалил просто (зависимости) а приводить в соответствие
SRC->OBJ стало лениво, я соответственно топиковым способом привел все
удалив и собрал пакет с зависимостями.

а автора апстреама еще надо убедить что надо систему сборки переписать
а она у него под вендулет, линукс, и еще что-то
нафиг? чуток пропатчил для себя и забил (патч автору сплавил а пусть он
там уж решает нужен ему или нет)

... Linux is like a wigwam - no windows, no gates, apache inside...

0 new messages