2010年3月13日星期六

Makefile 自動設定

由於Mac平台和Linux平台的glut差異很大
而我又不想動用autotools, automake 這些複雜的東西
畢章我的功課是很短很簡單的
無理由compile的工具佔大部份

所以我只用一個簡單的Makefile
在設定完變量後,簡單的判斷一下是否Mac OS
是的話就修改一下編譯參數


$ cat Makefile 
SHELL = /bin/bash
CC = g++
CFLAGS = -g -Wall -o
SRC = src/
BIN = bin/
DOC = doc/
# the command line arguments
RUN = lab2
CMDAG =
ifeq ($(shell [ -e /Developer/SDKs/MacOSX10.6.sdk ] ),)
        CFLAGS := -isysroot /Developer/SDKs/MacOSX10.6.sdk -framework OpenGL -framework GLUT  $(CFLAGS)
endif

.PHONY: all clean Run DeBug vi
all: $(RUN:%=$(BIN)%)
        @echo All Target: $^
        @echo "make all finished."
Run: all
        @cd $(BIN) && ./$(RUN) $(CMDAG) || echo "Can NOT run!!"
DeBug: all
        @cd $(BIN) && ./$(RUN) $(CMDAG) || gdb $(RUN)
vi:
        @echo "vim -p Makefile \
                lab2.cpp        \
        "
OBJECTS = \
                  lab2.cpp \

# rules for auto compile all .cpp into executable binary files
objects: $(OBJECTS:%.cpp=$(BIN)%.o)
$(BIN)%.o: %.cpp
        $(CC) -c $(CFLAGS) $@ $<
$(BIN)lab2: $(BIN)lab2.o
        $(CC) $(CFLAGS) $@ $^

clean:
        @find ./$(BIN) -iname '*.o' -delete
        @cd $(BIN) && for i in $(RUN); \
        do\
                if [ -e "$$i" ]; then rm "$$i" && echo "rm $$i"; fi;\
        done
        @[ ! -f doc/doc.html ] || rm doc/doc.html

ifeq ($(shell [ -e /Developer/SDKs/MacOSX10.6.sdk ] ),)
        CFLAGS := -isysroot /Developer/SDKs/MacOSX10.6.sdk -framework OpenGL -framework GLUT  $(CFLAGS)
endif
主要就是這句,用shell命令來檢測MacOSX10.6.sdk是否存在
是的話就會加上framework
不過呢,這個Makefile在Linux環境應該不能工作
因為linux需要加上-lglut
用glut library
由於我現在是Mac裹面,無法在Linux環境測試
所以先做出Mac適用的Makefile
for Linux的其實也很簡單,在加一個if就可以
發佈留言

熱門文章