【帮忙测试】——我的一个自动生成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

看看效果怎样?

有高手是否可以将程序做得更完善?欢迎指点,使用
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadedrip 2010-06-13
  • 打赏
  • 举报
回复
如果是生成 make 文件的话,推荐 CMake
tiejun 2003-04-16
  • 打赏
  • 举报
回复
自己做的东西,不错!
eion 2003-04-16
  • 打赏
  • 举报
回复
来来来
eion 2003-04-16
  • 打赏
  • 举报
回复
没音了!
shally5 2003-02-09
  • 打赏
  • 举报
回复
学习!
eion 2003-02-09
  • 打赏
  • 举报
回复
仅仅是学习,给点意见嘛
胖和尚minifat 2003-02-08
  • 打赏
  • 举报
回复
其实没有那么简单的....
胖和尚minifat 2003-02-08
  • 打赏
  • 举报
回复
qmake走的是另外一种风格,如果要求不高的话相当好用
mikekong 2003-02-08
  • 打赏
  • 举报
回复
我觉得autoconf,automake不错,你可以试试。
eion 2003-01-24
  • 打赏
  • 举报
回复
Sorry,Makefile还有一点要解释,应为上面优点错误:

#!/bin/bash
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 '\t'$CC $LINKPARA -o $base.o -c $cfile
echo
done
echo clean:
echo '\t'"rm -f $odir/*.o"

上面所有'\t'中的\t用键盘上的TAB代替,否则会有问题
林雨亭 2003-01-24
  • 打赏
  • 举报
回复
虽然做的可以,不过用autoconf,automake这些gnu的自动makefile生成工具试一试。
没有子文件夹,对于经常用的proc文件等等没有好的支持。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧