【帮忙测试】——我的一个自动生成Makefile文件
eion 2003-01-24 11:07:57 后面的代码是我的一个自动分析文件并生成Makefile的程序,该程序不需要对Makefile进行了解,只需要在需要创建Makefile的地方
运行 mmf > Makefile 即可,不过现在的mmf只能分析.cpp和.h之间的关系,如下面的一个工程(共9个文件)产生的Makefile
/* 文件名: main.cpp */
# include "file1.h"//12131111111
# include"file2.h"// asfda
#include <iostream.h>
//#include "afd"
int main(int argc, char* argv[])
{
cout << "Hello, World!" << endl;
func1();
func2();
cout << "main out " << endl;
return 0;
}
/* 文件名: file1.h */
void func1();
/* 文件名: */
#include "file1.h"
#include "file12.h"
#include "file11.h"
#include <iostream.h>
void func1()
{
cout << "func1 : Hello, world." << endl;
func11();
func12();
cout << "func1 :: out" << endl;
}
/* 文件名: file2.h*/
void func2();
/* 文件名: file2.cpp*/
#include "file2.h"
#include <iostream.h>
void func2()
{
cout << "func2 : Hello, World." << endl;
}
/* 文件名: file11.h*/
void func11();
/* 文件名: file11.cpp*/
#include "file11.h"
#include <iostream.h>
void func11()
{
cout << "func11 : Hello, world." << endl;
}
/* 文件名: file12.h*/
#include <iostream.h>
#include "file2.h"
void func12();
/* 文件名: file12.cpp*/
#include "file12.h"
#include <iostream.h>
void func12()
{
cout << "func12 : Hello, World." << endl;
func2();
cout << "func12 : out" << endl;
}
上述9个文件,拷贝到同一目录下,然后再在该目录下建立一个obj目录
mkdir obj
将用vi建立一个mmf文件
vi mmf
然后再将下面的代码填入mmf文件中
PROJECTNAME=main
LINKPARA=
CC=gcc
CXX=g++
odir="./obj"
ofile=
for cfile in *.cpp; do
base="$odir/`basename $cfile .cpp`"
ofile="$ofile $base.o"
done
echo $PROJECTNAME: $ofile
echo '\t'$CXX $ofile $LINKPARA -o $PROJECTNAME.o
echo
for cfile in *.cpp; do
base="$odir/`basename $cfile .cpp`"
infile=`grep 'include' $cfile | tr -d \ | tr \" \ | awk '$1 == "#include" {print $2}'`
echo $base.o: $cfile $infile
echo ' '$CC $LINKPARA -o $base.o -c $cfile
echo
done
echo clean:
echo '\t'"rm -f $odir/*.o"
注意上面的\t用键盘上的Tab键代替。输入完成后键入ESC键,然后再键入:x
这样我们就在盘上建立了一个mmf文件,改变文件属性为可执行文件:
chmod +x mmf
然后执行:
./mmf > Makefile
这样Makefile就建立好了,如下:
main: ./obj/file11.o ./obj/file12.o ./obj/file1.o ./obj/file2.o ./obj/main.o
g++ ./obj/file11.o ./obj/file12.o ./obj/file1.o ./obj/file2.o ./obj/main.o -o main.o
./obj/file11.o: file11.cpp file11.h
gcc -o ./obj/file11.o -c file11.cpp
./obj/file12.o: file12.cpp file12.h
gcc -o ./obj/file12.o -c file12.cpp
./obj/file1.o: file1.cpp file1.h file12.h file11.h
gcc -o ./obj/file1.o -c file1.cpp
./obj/file2.o: file2.cpp file2.h
gcc -o ./obj/file2.o -c file2.cpp
./obj/main.o: main.cpp file1.h file2.h
gcc -o ./obj/main.o -c main.cpp
clean:
rm -f ./obj/*.o
然后就可以用make命令了
make
如果程序无误,我们就可以运行程序了
生成的程序名称为main.o
如果想改成别的,只需要在mmf中的第一行中的main改成想要的名字就OK了
下面你就可以运行程序了
./main.o
看看效果怎样?
有高手是否可以将程序做得更完善?欢迎指点,使用