Форум — Development Генерация Makefile 0 0 Как бы сгенерировать Makefile для директории в которой лежит порядка 40 сишных файлов, из этих файлов должны сгенериться объектные файлы которые реализуют API для DB Ссылка
(find -iname '*.c' | xargs echo -e 'SRCS = ' && echo -e 'OBJS = $(SRCS:.c=.o)\n\nall: $(OBJS)') > Makefile no1sm ★★ (20.09.05 17:08:40 MSK) Ссылка
Кури вот это. Эта штука компиит все *.cc файлы в текущем каталоге, исходники лексического (*.l) и синтаксического анализаторов (*.y) учитывает депенденсы и расскидывает промежуточные файлы по нужным папкам (.obj .dep .gen ) # Имя результирующего файла ZLANG_NAME = ../lang2 # Директория, где лежат исходники сгенерированные flex-ом и bison-ом SCANDIR= ./.gen/ # Директория зависимостей DEPSDIR= ./.deps/ # Директория, где лежат *.o OBJDIR= ./.obj/ # Опции сборки CXX = g++ CXXFLAGS = -I./.gen/ LDFLAGS= LIBS = -lfl # Исходники лексического и синтаксического генераторов LEX_SOURCES := $(wildcard *.l) BISON_SOURCES := $(wildcard *.y) # производные файлы flex и bison LEX_CPP_SOURCES := $(addprefix $(SCANDIR),$(LEX_SOURCES:.l=.lex.h)) BISON_CPP_SOURCES := $(addprefix $(SCANDIR),$(BISON_SOURCES:.y=.yacc.cc)) # объектные файлы BISON_CPP_OBJ := $(addprefix $(OBJDIR),$(BISON_SOURCES:.y=.yacc.o)) # исходники .cc CPP_SOURCES := $(wildcard *.cc) CPP_DEPENDS := $(addprefix $(DEPSDIR),$(CPP_SOURCES:.cc=.d)) CPP_OBJ := $(addprefix $(OBJDIR),$(CPP_SOURCES:.cc=.o)) # генерируем лексический, синтаксический анализаторы, компилируем все что получилось all: generate_lexer generate_parser compile_bison_cpp compile_common_cpp link_all generate_lexer : $(LEX_CPP_SOURCES) $(LEX_CPP_SOURCES) : $(LEX_SOURCES) generate_parser : $(BISON_CPP_SOURCES) $(BISON_SOURCES) $(LEX_SOURCES) $(BISON_CPP_SOURCES) : $(BISON_SOURCES) $(LEX_SOURCES) compile_common_cpp : $(CPP_OBJ) compile_bison_cpp : $(BISON_CPP_OBJ) link_all : $(CPP_OBJ) $(BISON_CPP_OBJ) $(CXX) $(LDFLAGS) $(wildcard $(OBJDIR)*.o) -o $(ZLANG_NAME) $(LIBS) clean: rm -f $(SCANDIR)*.lex.h $(SCANDIR)*.yacc.cc $(OBJDIR)*.o $(DEPSDIR)*.d *~ $(ZLANG_NAME) include $(CPP_DEPENDS) $(SCANDIR)%.lex.h : %.l flex -o$@ $< $(SCANDIR)%.yacc.cc : %.y bison -o $@ $< $(OBJDIR)%.yacc.o : $(SCANDIR)%.yacc.cc $(CXX) $(CXXFLAGS) -c -o $@ $< $(DEPSDIR)%.d : %.cc echo $(OBJDIR)`$(CXX) $(CXXFLAGS) -MM $<` >$@ $(OBJDIR)%.o : %.cc $(CXX) $(CXXFLAGS) -c -o $@ $< anonymous (21.09.05 10:01:28 MSK) Ссылка