1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
SRC = $(wildcard *.c)
OBJ = $(SRC:%.c=obj/%.o)
SO_OBJ = $(filter-out main.o,$(OBJ))
WOBJ = $(SRC:%.c=obj/%.obj)
DLL_OBJ = $(filter-out main.obj,$(WOBJ))
UMASK = 022
TIMECMD = /usr/bin/time -p
# цель для Linux (для венды будет с суффиксом .exe)
TARGET = csim
# флаги линуксового компилятора
CCFLAGS = -MMD -g -O2 -fomit-frame-pointer
# флаги виндового компилятора
WCCFLAGS = -g -O2 -D__WIN32__ -fomit-frame-pointer
SIZE = size
WSIZE = i586-mingw32msvc-size
# линуксовый компилятор
CC = gcc
# виндовый компилятор
WCC = i586-mingw32msvc-gcc
WLIBS =
# по умолчанию собираем для линукс только
all: for_linux
# сборка под все платформы
all_targets: for_linux for_win32
# сборка для линукс
for_linux: $(TARGET)
#$(TARGET).so
# сборка для венды
for_win32: $(TARGET).exe
# csim (static)
$(TARGET): $(OBJ)
umask $(UMASK) && $(CC) $(OBJ) -o $@
$(SIZE) $@
# csim.so
$(TARGET).so: $(SO_OBJ)
umask $(UMASK) && $(CC) $(SO_OBJ) -o $@ -shared -nostartfiles
$(SIZE) $@
# csim.dll
$(TARGET).dll: $(DLL_OBJ)
$(WCC) $(DLL_OBJ) -o $@ -shared
$(WSIZE) $@
# csim_wl.exe (dynamic)
$(TARGET)_wl.exe: obj/main.obj $(TARGET).dll
$(WCC) obj/main.obj $(TARGET).dll -o $@
$(WSIZE) $@
# csim_wl (dynamic)
$(TARGET)_wl: $(TARGET).so
umask $(UMASK) && $(CC) obj/main.o $< -o $@
# csim.exe (static)
$(TARGET).exe: $(WOBJ)
$(WCC) $(WOBJ) -o $@ -static $(WLIBS)
$(WSIZE) $@
obj/%.obj: %.c Makefile
-@mkdir -p obj
$(WCC) -c $(WCCFLAGS) $< -o $@
obj/%.o: %.c Makefile
-@mkdir -p obj
$(CC) -c $(CCFLAGS) $< -o $@
units.conf: $(wildcard langs/??) base_units.conf
umask 022 && \
cp -f base_units.conf $@
for lang in $(wildcard langs/??); do \
echo -e "\n\n#Language $$lang\n" >> $@; \
cat $$lang >> $@; \
done
units_info.c: units.conf create_units.pl units_info.h Makefile
perl create_units.pl $< -c $@ -h /dev/null
units_info.h: units.conf create_units.pl Makefile
perl create_units.pl $< -h $@ -c /dev/null
clean:
rm -fr obj
open_project:
ifeq ($(TERM),screen)
@if [ -e .Makefile.swp ]; then \
echo "Проект уже открыт!"; \
else \
for i in Makefile units.conf create_units.pl *.[ch]; do \
screen -t $$i vim $$i; sleep 0.5; \
done; \
fi
else
@echo проект открывается только под screen
endif
test: $(TARGET)
$(TIMECMD) ./$(TARGET) -s 100 -f 3 -i tests/test1.txt
test2: $(TARGET)
$(TIMECMD) ./$(TARGET) -t 3 -s 100 -f 3 -i tests/test2.txt
test3: $(TARGET)
$(TIMECMD) ./$(TARGET) -s 100 -f 3 -i tests/test3.txt
include $(wildcard obj/*.d)
.PHONY: all clean test test2 test3 open_project for_linux for_win32 all_targets
|