现在一般的程序,代码编写、文件编译及连接等都会在既有的集成编程环境IDE中进行。如vs2018等。如果在Unix环境或cydriver命令行方式编译程序,需要认真学习make命令方式。

以SLS编译器WalkSAT为例讲解程序编译。

1.首先在文件夹WalkSATlm2013内准备程序文件:wsat.h 和 wsat.cpp。

2.在相同目录下新建文件名为makefile(也可以名为Makefile)的make文件。内容如下:

 1 all: WalkSATlm2013 clean
 2 
 3 WalkSATlm2013: wsat.cpp wsat.h
 4         g++ wsat.cpp -O3 -static -o WalkSATlm2013
 5 
 6 clean:
 7     rm -f *~
 8 
 9 cleanup:
10     rm WalkSATlm2013
11     rm -f *~

1.注释如下:


 

    第3行  WalkSATlm2013为编译项,其后冒号:紧跟着的文件( wsat.cpp   wsat.h,中间以空格符分开,可以写多个) 是该编译项的依赖文件。如果任一依赖文件发生了更新(修改),运行 make时就会重新编译

WalkSATlm2013编译项。
第4行以Tab字符开头紧接着WalkSATlm2013编译项所在行,是编译该项所执行的命令。

重点说一下该编译命令:
g++ 为内置c++编译器;   -03 -static 是编译命令参数;
-o 表示编译,-o前方文件名是需要编译的cpp文件名,可以有多个;-o其后跟的字符串WalkSATlm2013就是编译得到的.exe文件名

其它说明:
all没有太多实际意义,指明该makefile文件有哪些编译项,通常所接的第一个项为主函数项。
clean 是约定俗成的清理已经编辑得到的exe以及其它中间文件的编译项。在窗口命令行输入make clean会执行之后的命令 rm -f *~ ,该命令实现清理。

2.编译的实现和使用


在窗口命令行使用cd命令指定当前工作路径为makefile所在文件夹;执行make,得到WalkSATlm2013.exe,随后即可以使用exe文件。
如修改了文件wsat.cpp或wsat.h代码,需要重新编译(一般先清除再编译),可以执行make clean,值后再执行make。

相关过程演示图如下:

图1:编译命令

 

图2:文件夹内容

 


图3: 程序使用——以求解SAT问题q889.cnf公式集为例。



 

posted on 2020-03-27 15:12  海阔凭鱼跃越  阅读(271)  评论(0编辑  收藏  举报