LINUX.ORG.RU

include в makefile


0

0

Хочу сделать следующее:
в некоем Makefile определяем переменные, на пример,
APP=privet
SOURCE=vasia.cpp
и пишем инклюд где использую эти переменные, чтобы компиляться
include $(PROJECT_ROOT)/default.mk

в самом default.mk имеем что-нибудь вроде такого
$(APP): хитрые_зависимости
хитрые_правила

проблема в том, что переменная определенная в Makefile "не видна" (пустая) в default.mk
это так и должно быть или как-то можно обойти это? было б удобно держать один default.mk со всеми правилами (общими для всего проекта), а в рабочих катлогах иметь простенькие дефиниции исходников и библиотек...

anonymous

> было б удобно держать один default.mk со всеми правилами (общими для всего проекта), а в рабочих катлогах иметь простенькие дефиниции сходников библиотек...
- хитёр-бобёр :)
А если серьёзно, то так и делается, и не только в Makefile.
Но где ты видел, чтобы, например, системный хедер использовал определения, заданные в исходном коде самой программы?
Этого нет, ибо это не правильно - всё происходит с точностью до наоборот.
А на счёт твоей проблемы я удивлён - у меня всё видно.
Я работаю на FreeBSD и у неё своя версия make, но есть и от GNU
(та же, что в пингвине), она здесь зовётся gmake.
А я пишу Makefile так , чтобы они могли работать и во фре и в лине, посему проверил - работает.
Вот пример, на котором проверял (извини, специально не стал писать а взял рабочий и добавил цель bug) - запускай make bug, если увидишь
строку "OK: tune.cgi" значит работает
----------------------------
Makefile:
===================
CC = gcc33
CXX = g++33
CPP = cpp33
ARC = ar
NDX = ranlib

DEFS += FREEBSD FREEBSD_VER=4
LIBS = libcrypt libaSe
LDIRS = . /usr/local/lib $(HOME)/PRJ/aSe
IDIRS = . /usr/local/include $(HOME)/PRJ/aSe

LOPTS =
COPTS = Wall fsave-memoized fexceptions fverbose-asm fexpensive-optimizations
OPTS = O0 ggdb3

LFLAGS = ${OPTS:%=-%} ${LOPTS:%=-%} ${LDIRS:%=-L%} ${LIBS:lib%=-l%}
CFLAGS = ${OPTS:%=-%} ${COPTS:%=-%} ${IDIRS:%=-I%} $(DEFS:%=-D%)
DFLAGS = $(IDIRS:%=-I%) $(DEFS:%=-D%)

CSRC != ls *.c
CPPSRC != ls *.cpp
CSRC += $(shell ls *.c)
CPPSRC += $(shell ls *.cpp)
SRCLIST = $(CSRC) $(CPPSRC)

CHDR != ls *.h
CPPHDR != ls *.hpp
CHDR += $(shell ls *.h)
CPPHDR += $(shell ls *.hpp)
HDRLIST = $(CHDR) $(CPPHDR)

COBJ = $(CSRC:%.c=%.o)
CPPOBJ = $(CPPSRC:%.cpp=%.o)
OBJLIST = $(COBJ) $(CPPOBJ)


PRODUCTS = tune.cgi

DOCFILES = README
SUPPFILES = Makefile

.c.o:
$(C) -c $< $(CFLAGS) -o $@

.cpp.o:
$(CPP) -c $< $(CFLAGS) -o $@

all:: $(PRODUCTS)

clean::
rm -rfv $(OBJLIST) *.core .depend core log

distclean:: clean
rm -rfv $(PRODUCTS)

bug:: test
@echo "LFLAGS:" $(LFLAGS)
@echo "CFLAGS:" $(CFLAGS)
@echo "DFLAGS:" $(DFLAGS)
@echo "SRCLIST:" $(SRCLIST)
@echo "HDRLIST:" $(HDRLIST)
@echo "OBJLIST:" $(OBJLIST)
@echo "VERSION:" $(MAKE_VERSION)

tune.cgi:: $(OBJLIST)
$(CXX) $(OBJLIST) $(LFLAGS) -o $@

tune.o:: tune.cpp tune.h
$(CXX) $(CFLAGS) -c tune.cpp -o $@

.PHONY:: all clean distclean bug

include Makefile.opt

----------------------------
Makefile.opt :
===================
test:
echo "OK: ${PRODUCTS}"

.PHONY:: test

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