您的位置:首页 > 其它

教你如何在命令行下编译程序之二

2009-03-13 12:58 357 查看
 

//日期:2009.03.12//作者:goodshell//转载请注明来源:http://blog.csdn.net/goodshell
 

上次我设置了环境变量,以使得程序能成功地在命令行下编译.现在我举个具体的例子来说明一下,源程序如下:

 

//print.cpp 读取文件并在屏幕上显示
#include <stdio.h>
#include <iostream.h>
#include <string.h>
char* GetProgName(char *);
void ReadIn(FILE *ifp,FILE *ofp);
main(int argc,char* argv[])
{
char* ProgName;
FILE *fp;
ProgName=GetProgName(argv[0]);
if(argc<2)
{
fprintf(stderr,"%s: Please enter a file name/n",ProgName);
return (-1);
}
for(int i=1;i<argc;++i)		//循环显示多幅图像
{
if((fp=fopen(argv[i],"rb"))==NULL)
{
fprintf(stderr,"%s: Cannot open %s/n",ProgName,argv[i]);
continue;
}
printf("%s is opened:",argv[i]);
printf("/n--------------%s-------------------/n",argv[i]);
ReadIn(fp,stdout);
fclose(fp);
printf("/n--------------%s end---------------/n/n/n",argv[i]);
}
return 0;
}
char *GetProgName(char *Path)	//传进来的是指向执行程序名字路径的指针
{
char *s;										//返回指向程序名的指针
if((s=strrchr(Path,'//'))!=NULL||		//这里'//'指的是转义字符,就是/,也可以用0X5C表示
(s=strrchr(Path,'/'))!=0)
{
return (s+1);
}
else
{
return (Path);
}
}
void ReadIn(FILE *ifp,FILE *ofp)
{
char Line[256];
while(fgets(Line,sizeof(Line),ifp)!=NULL)
{
fputs(Line,ofp);
}
}
 

将以上文件保存为print.cpp,然后DOS到当前目录,键入如下命令:

cl print.cpp [回车]

可以看到:


这说明编译成功,产生了目标文件(.obj)和程序文件(.exe)。其实这一步是分为两步来完成的,现在把这两个文件删除,重新键入如下命令:

cl print.cpp -c [回车]

-c参数是只编译不链接,现在可以看到在目录下只生成了目标文件(.obj),而没有.exe可执行文件.

现在再键入如下命令:

cl print.obj [回车]

可以看到.exe文件现在生成了.虽然这一步是使用的cl.exe编译器,实际上它是调用了链接程序link.exe才完成的.当然,现在也可以直接调用链接程序来完成这项工作,删除生成的.exe文件,重新键入以下命令:

link print.obj [回车]

可以发现,可执行文件print.exe又重新生成了.

现在我们来测试一下生成的程序到底执行了什么功能,在当前目录下新建两个文本文件,分别为1.txt和2.txt,随便输入几行文字,在命令提示符下输入以下命令:

print 1.txt 2.txt [回车]

可以看到以下输出:


好了,到这里我们的任务就算完成了,代码很容易理解的,我就不多讲了.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  file path null fp 编译器 dos