#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
void getname( char *name , char *tmp )
{
char tail[10];
int i = 0 , j = 0;
while( name[ i++ ] != '\\' )
;
while( name[ i ] )
tail[ j++ ] = name[ i++ ];
tail[ --j ] = 'o';
tail[ ++j ] = '\0';
strcat( tmp , tail );
}
//example的字符形如 list\ex-1.c ,其中list是文件夹的名字
//目的是得到字符集“gcc -g -c E:\AlgoritbmsCode\examples_pc\examples\list\ex-1.c -IE:\AlgoritbmsCode\examples_pc\include -o E:\AlgoritbmsCode\examples_pc\binary\ex-1.o”
//并把exam_o用obj文件名写好,例如ex-1.o,以便后面的link程序使用
void compile_exam( char *example , char *exam_o )
{
int i = 0 , j = 0;
char MyCommand[200] = "gcc -g -c E:\\AlgoritbmsCode\\examples_pc\\examples\\";
char tmp[100] = " -IE:\\AlgoritbmsCode\\examples_pc\\include -o E:\\AlgoritbmsCode\\examples_pc\\binary\\"; //81个字符
strcat( MyCommand , example );
getname( example , tmp ); //把example指向的字符集后一个文件名提取出来,并把它的最后一个字符也就是c改成o,然后添加到tmp的尾部
strcat( MyCommand , tmp );
//printf("\n%s\n",MyCommand);
system( MyCommand );
i = strlen(MyCommand);
while( MyCommand[ i-- ] != '\\' )
;
//从上面循环出来的i指向的是最后的两个'\\'中的前面一个,所以接下来的一行使用的是++i,这样指向的就是后面的一个‘\’,但是还是没有指向我们所需要的字符,所以在下面的赋值中我们使用的是++i
++i;
while( MyCommand[ i ] )
exam_o[ j++ ] = MyCommand[ ++i ];
}
void compile_src( char *source , char *src_o )
{
int i = 0;
int j = 0;
char MyCommand[200] = "gcc -g -c E:\\AlgoritbmsCode\\examples_pc\\source\\";
char tmp[100] = " -IE:\\AlgoritbmsCode\\examples_pc\\include -o E:\\AlgoritbmsCode\\examples_pc\\binary\\"; //81个字符
strcat( MyCommand , source );
strcat( tmp , source );
strcat( MyCommand , tmp );
MyCommand[ strlen( MyCommand ) - 1 ] = 'o';
//printf("\n%s\n",MyCommand);
system( MyCommand );
i = strlen(MyCommand);
while( MyCommand[ i-- ] != '\\' )
;
++i;
while( MyCommand[ i ] )
src_o[ j++ ] = MyCommand[ ++i ];
}
void link( char *exam_o , char *src_o )
{
char MyCommand[200] = "gcc -g ";
int i = 0;
char binary_file_name[10];
char path[50] = "E:\\AlgoritbmsCode\\examples_pc\\binary\\";
while( src_o[i] )
binary_file_name[i++] = src_o[i];
--i;
//得到扩展名为exe的名字
binary_file_name[ i++ ] = 'e';
binary_file_name[ i++ ] = 'x';
binary_file_name[ i++ ] = 'e';
binary_file_name[ i ] = '\0';
//将命令组合起来,使之成为"gcc -g E:\\AlgoritbmsCode\\examples_pc\\binary\\ex-1.o E:\\AlgoritbmsCode\\examples_pc\\binary\\list.o -o E:\\AlgoritbmsCode\\examples_pc\\binary\\list.exe"
strcat( MyCommand , path );
strcat( MyCommand , exam_o );
strcat( MyCommand , " " );
strcat( MyCommand , path );
strcat( MyCommand , src_o );
strcat( MyCommand , " -o " );
strcat( MyCommand , path );
strcat( MyCommand , binary_file_name );
//printf( "%s\n",MyCommand );
system( MyCommand );
}
int main( int argc , char *argv[] )
{
char exam_o[10] , src_o[10];
compile_exam( argv[1] , exam_o );
compile_src( argv[2] , src_o );
link( exam_o , src_o );
return 1;
}
转载于:https://my.oschina.net/nibnat/blog/191864