2008-09-23

Borland C+GNU make编译、链接项目

Borland C+GNU make编译、链接项目
    Borland C 3.1的编译器举世无双,但其IDE在今天看来是丑陋之极。相信很多人都用Eclipse + CDT或者Vim等工具写代码,然后打开BCC建立工程,编译、链接程序。因此,笔者探索了利用脚本或make工具+bcc等命令完成对项目的编译、链接。
    为了更具有代表性,我建立了三个文件,main.c、fun.c和include/fun.h
main.c:
#include <stdio.h>
#include "fun.h"

int main(void)
{
        print();
        getchar();
        return 0;
}

fun.c:
#include <stdio.h>
#include "fun.h"

void print(void)
{
        printf("Hello, World!n");
}

fun.h:
void print(void);

    建立好文件后,首先使用最简单的方法--批处理脚本,建立run.bat文件。
run.bat
::Batch file, for Turbo C 2.0 and Borland C 3.1
set CC_HOME=D:/BORLANDC
set BIN=%CC_HOME%/BIN
set INCLUDE=%CC_HOME%/INCLUDE;./INCLUDE
set LIB=%CC_HOME%/LIB;./LIB

set PATH=%PATH%;%BIN%
set CC=%BIN%/bcc

set DIST=Release
set TARGET=pos.exe

set CFLAGS=-c -mm -O2 -G -I%INCLUDE% -n%DIST%
set LFLAGS=-mm -L%LIB% -n%DIST%

if not exist %DIST% mkdir %DIST%
%CC% %CFLAGS% *.c
%CC% -e%TARGET% %LFLAGS% %DIST%/*.obj

    运行,dist文件夹中就生成了执行文件test.exe,但是批处理文件自身功能有限,下面,我们尝试使用功能更强大的GNU make来描述项目依赖,编译、链接项目。
makefile
# GNU make makefile in windows and Dos, for Turbo C 2.0 and Borland C 3.1
# Confirm GNU make is in you PATH
SHELL=cmd.exe

CC_HOME=D:/BORLANDC
BIN=$(CC_HOME)/BIN
INCLUDES=$(CC_HOME)/INCLUDE;./INCLUDE
LIBS=$(CC_HOME)/LIB;./LIBS

export PATH=%PATH%;$(BIN)
CC=$(BIN)/bcc

DIST=Release
TARGET=pos.exe

CFLAGS=-c -mm -O2 -G -I$(INCLUDES) -n$(DIST)
LFLAGS=-mm -L$(LIBS) -n$(DIST)

all:link

link:compile
        $(CC) -e$(TARGET) $(LFLAGS) $(DIST)/*.obj
compile:setup
        $(CC) $(CFLAGS) *.c
setup:
        if not exist $(DIST) mkdir $(DIST)

clean:
        del /Q $(DIST)

    总结,linux下,vim+gcc+make为程序员提供了一个简单、实用而有效的项目编译、链接方案,对于Windows用户,编译器厂家都将自己的编译器封装起来,在某种程度上,把程序员绑定到IDE上了,程序员很难择自己喜欢、习惯的文本编辑工具。通用的编译脚本和GNU make脚本或许是Windows程序员的另外一种选择。


没有评论: