现在一般的程序,代码编写、文件编译及连接等都会在既有的集成编程环境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公式集为例。