【帮忙测试】——我的一个自动生成Makefile文件

eion eion 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
后面的代码是我的一个自动分析文件并生成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

看看效果怎样?

有高手是否可以将程序做得更完善?欢迎指点,使用
...全文
评论 11
收藏 已收藏
分享
返回顶部
eion
Linux/Unix社区 23,224 成员 74,535 内容