【前言】
X86的64位PC机上,一般使用eclipse+mingw的编辑和编译环境来实现无界面和有界面的开发工作,之前使用eclipse搭建环境需要用到dll库,而eclipse使用mingw编译环境对dll的支持不是很好,一直无法正常添加dll库到工程中去,所以摒弃了eclipse的编辑界面,直接使用Makefile+mingw64来编译链接,直接使用source insight来编辑代码,非常清爽。
【目的】
Makefile + Mingw64的环境,并调用dll动态库,来实现msys dos环境的c程序运行。
【方案】
自己实现Makefile文件,代码目录组织如下:
build存放.o文件,heads存放头文件,libs存放dll文件,src存放c源文件。
【实现】
Makefile的具体内容如下:
# flags
CC = gcc
#CFLAGS = -Wall
LFLAGS =
# args
RELEASE =0
BITS = 64
OBJ_DIR := build
INC_DIR := heads
SRC_DIR := src
LIB_DIR := libs
RUN_DIR := run
# [args] 生成模式. 0代表debug模式, 1代表release模式. make RELEASE=1.
ifeq ($(RELEASE),0)
# debug
CFLAGS += -g -I$(INC_DIR) -o0
else
# release
CFLAGS += -static -I(INC_DIR) -O3 -DNDEBUG
LFLAGS += -static
endif
# [args] 程序位数. 32代表32位程序, 64代表64位程序, 其他默认. make BITS=32.
ifeq ($(BITS),32)
CFLAGS += -m32
LFLAGS += -m32
else
ifeq ($(BITS),64)
CFLAGS += -m64
LFLAGS += -m64
else
endif
endif
.PHONY : all clean
# files
TARGETS := $(OBJ_DIR)\auto_test
OBJS = $(OBJ_DIR)/atest.o
OBJS += $(OBJ_DIR)/putil.o
OBJS += $(OBJ_DIR)/xml.o
OBJS += $(OBJ_DIR)/dlog.o
LIBS = $(LIB_DIR)/*.dll
all : $(TARGETS)
move /Y $(OBJ_DIR)\\*.exe $(RUN_DIR)
$(TARGETS) : $(OBJS) $(LIBS)
$(CC) $(LFLAGS) -o $@ $^
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean :
del /F /S /Q $(OBJ_DIR)\*.*
gcc编译链,需要先安装好mingw64的交叉编译链和path的系统环境变量设置。dll直接作为目标文件来参与链接,且不需要使用-l来指定以来的系统库。直接make和make clean来方便编译。