Туполю с простейшим makefile-ом
От: Посторонним В. Беларусь  
Дата: 11.01.08 14:57
Оценка:
Такой простейший makefile
SRC=file.c
OBJ=file.o

all: $(OBJ)

%.o: src/%.c
    gcc -c $< -o $@

выдает:

make: don't know how to make file.o.

Система OpenBSD 4.2, make не менял (кстати, как узнать версию make?).
Тот же makefile работает в Linux на ура.
Re: Туплю с простейшим makefile-ом
От: Сомов Александр Россия  
Дата: 11.01.08 16:01
Оценка:
В разных системах make вполне может быть разный. Их много, и все со своим синтаксисом.

Версию можно узнать ключом -v, -V или --version. У всех тоже по-разному.

Можно ещё на этой же системе сделать man make и почитать, обычно документация соответствует установленному. По ней будет хорошо видно, разный синтаксис или нет.
Re: Туполю с простейшим makefile-ом
От: Kirikaza Россия kirikaza.ru
Дата: 12.01.08 07:33
Оценка:
Попробуйте gmake под BSD.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Туполю с простейшим makefile-ом
От: Посторонним В. Беларусь  
Дата: 12.01.08 07:57
Оценка:
Здравствуйте, Kirikaza, Вы писали:

K>Попробуйте gmake под BSD.


Так скорее всего заработает, но хотелось бы для родного BSD make выкрутиться.
Re[3]: Туполю с простейшим makefile-ом
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.01.08 08:42
Оценка: 2 (1)
Здравствуйте, Посторонним В., Вы писали:

ПВ>Здравствуйте, Kirikaza, Вы писали:


K>>Попробуйте gmake под BSD.


ПВ>Так скорее всего заработает, но хотелось бы для родного BSD make выкрутиться.


http://www.freebsd.org/doc/en_US.ISO8859-1/books/pmake/index.html
http://docs.freebsd.org/44doc/psd/12.make/paper.html
The God is real, unless declared integer.
Re[4]: Туполю с простейшим makefile-ом
От: Посторонним В. Беларусь  
Дата: 12.01.08 09:29
Оценка:
Здравствуйте, netch80, Вы писали:

ПВ>>Так скорее всего заработает, но хотелось бы для родного BSD make выкрутиться.


N>http://www.freebsd.org/doc/en_US.ISO8859-1/books/pmake/index.html

N>http://docs.freebsd.org/44doc/psd/12.make/paper.html

Срасибо, на pmake натыкался, но не знал что это и есть BSD make
Re[4]: Туполю с простейшим makefile-ом
От: Посторонним В. Беларусь  
Дата: 12.01.08 10:27
Оценка:
Здравствуйте, netch80, Вы писали:

N>http://www.freebsd.org/doc/en_US.ISO8859-1/books/pmake/index.html

N>http://docs.freebsd.org/44doc/psd/12.make/paper.html

Заработало. Сделал вот так:
CXX=g++
AR=ar
ARFLAGS=rcs
SOURCES=a.cpp b.cpp c.cpp
SOURCES_DIR=src
OUT_DIR=../bin
CFLAGS:=-c -Wall -D NDEBUG -O3
OBJECTS=$(SOURCES:.cpp=.o)
DEPS=$(SOURCES:%.cpp=src/%.h)
OUT_LIB=libAbc.a

.PHONY: clean

all: $(OUT_LIB)

$(OUT_LIB): makedir $(OBJECTS)
    $(AR) $(ARFLAGS) $(OUT_DIR)/$(.TARGET) $(OBJECTS)

$(OBJECTS): $(SOURCES_DIR)/$(.PREFIX).cpp $(DEPS)
    $(CXX) $(INCLUDES) $(CFLAGS) $(SOURCES_DIR)/$(.PREFIX).cpp -o $(.TARGET)

makedir:
    mkdir -p $(OUT_DIR)

clean:
    rm -f *.o 
    rm -f $(OUT_DIR)/$(OUT_LIB)


Остался один вопрос. В выделенной строке я хочу из списка a.cpp b.cpp c.cpp получить список src/a.h src/b.h src/c.h
Как это сделать передавая $(SOURCES_DIR), а не "src" ?

Спасибо
Re[5]: Туполю с простейшим makefile-ом
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.01.08 10:36
Оценка:
Здравствуйте, Посторонним В., Вы писали:

ПВ>Здравствуйте, netch80, Вы писали:


ПВ>>>Так скорее всего заработает, но хотелось бы для родного BSD make выкрутиться.


N>>http://www.freebsd.org/doc/en_US.ISO8859-1/books/pmake/index.html

N>>http://docs.freebsd.org/44doc/psd/12.make/paper.html

ПВ>Срасибо, на pmake натыкался, но не знал что это и есть BSD make


Есть как минимум два разных pmake. Но тот pmake что идёт в составе RedHat и подобных — это BSD make из 4.4BSD-Lite (то есть достаточно старый и глючный).
The God is real, unless declared integer.
Re[5]: Туполю с простейшим makefile-ом
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.01.08 10:45
Оценка: 2 (1)
Здравствуйте, Посторонним В., Вы писали:

ПВ>DEPS=$(SOURCES:%.cpp=src/%.h)


ПВ>Остался один вопрос. В выделенной строке я хочу из списка a.cpp b.cpp c.cpp получить список src/a.h src/b.h src/c.h

ПВ>Как это сделать передавая $(SOURCES_DIR), а не "src" ?

Может, используя :S ?

А то вот такие примеры есть:

_S_TEMP=        ${_S:S/^${_S:C@/:[^/:]+$@/@}//:S/^://}
PATCH_SITES_TMP+=       ${site:S^%SUBDIR%^\${dir}^}
_IGNOREFILES?=  ${IGNOREFILES:S/^/${DIST_SUBDIR}\//}
.for lang in ${MANLANG:S%^%man/%:S%^man/""$%man%:S%^man/"$%man%}
_MANPAGES+=     ${MAN${sect}_${manlang:S%^man/%%:U}:S%^%${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%}
The God is real, unless declared integer.
Re[6]: Туполю с простейшим makefile-ом
От: Посторонним В. Беларусь  
Дата: 13.01.08 16:01
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, Посторонним В., Вы писали:


ПВ>>DEPS=$(SOURCES:%.cpp=src/%.h)


ПВ>>Остался один вопрос. В выделенной строке я хочу из списка a.cpp b.cpp c.cpp получить список src/a.h src/b.h src/c.h

ПВ>>Как это сделать передавая $(SOURCES_DIR), а не "src" ?

N>Может, используя :S ?


Cпасибо, c :S заработало!
...
# replace .cpp with .h
DEPS=$(SOURCES:%.cpp=%h)
# add $(SOURCES_DIR)/ to each header
DEPS:=${DEPS:S/^/$(SOURCES_DIR)\//}
...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.