最近研究如何使用wxWidgets进行快速应用程序开发的时候,为了方便写了一个makefile,然后扩展了一下。
使用方法如下:
make project
make
make clean
解释:
make project 会在当前目录下创建src、obj、src/headers、src/sources,然后将目录下的所有后缀为.cpp的文件移动至src/sources,将所有后缀为.h的文件移动至src/headers;接下来make执行编译过程;make clean会将obj文件夹下的后缀为.o的文件全部删除。
注意:
1.这里使用到了wx-config这个实用程序。如果PATH下面没有的话请添加;如果没有wx-config,请下载。
2.如果是windows系统下,可能需要编译资源文件,可以用windres编译,然后在makefile中添加相关编译命令。
###################################################################
#
# This is a makefile that is suitable for wxWidgets
#
# You need to modify some options below and just type 'make' in
# terminal.
# ---- created by misskanagi 2013/9/4
###################################################################
#basic configuration and compiler flags
SHELL = /bin/sh
CC = gcc
XX = g++
RES = windres
DEBUGFLAGS = -g
RELEASEFLAGS = -O2 -s
RESOURCEFLAGS = `wx-config --rcflags`
INCLUDES = -Isrc/headers/
CXXFLAGS = -Wall -Wextra `wx-config --cxxflags` $(INCLUDES)
LIBS = `wx-config --libs core,base,richtext,adv,html,xml` -s -mwindows
#directory variables
OBJDIR = obj/
HEADERDIR = src/headers/
SOURCEDIR = src/sources/
#sources and objects variables
TARGET = NumGame
SOURCES = $(shell echo $(SOURCEDIR)*.cpp)
HEADERS = $(shell echo $(HEADERDIR)*.h)
OBJECTS = $(subst $(SOURCEDIR),$(OBJDIR),$(SOURCES:.cpp=.o))
#####################################################################
# WARNING:
# DO NOT MODIFY REST OF THIS FILE UNLESS YOU KOWN WHAT YOU ARE DOING!
#####################################################################
#command
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(XX) $(CXXFLAGS) $(DEBUGFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
release: $(SOURCES) $(HEADERS)
$(XX) $(CXXFLAGS) $(RELEASEFLAGS) -o $(TARGET) $(SOURCES) $(LIBS)
$(OBJDIR)%.o: $(SOURCEDIR)%.cpp $(HEADERS)
$(XX) $(CXXFLAGS) $(DEBUGFLAGS) -c -o $@ $<
project: *.h *.cpp
-mkdir obj
-mkdir src
-mkdir src/headers
-mkdir src/sources
mv *.h src/headers
mv *.cpp src/sources
$(TARGET).app:Info.plist $(TARGET) $(TARGET).icns
-mkdir $(TARGET).app
-mkdir $(TARGET).app/Contents
-mkdir $(TARGET).app/Contents/MacOS
-mkdir $(TARGET).app/Contents/Resources
cp Info.plist $(TARGET).app/Contents/
cp $(TARGET) $(TARGET).app/Contents/MacOS/$(TARGET)
cp $(TARGET).icns $(TARGET).app/Contents/Resources/
.PHONY : all release clean distclean project
clean:
-rm -f $(TARGET)
-rm -f $(OBJECTS)
distclean: clean
-rm -f $(TARGET)