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;
}
#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");
}
#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
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)
# 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程序员的另外一种选择。
没有评论:
发表评论