SCons

简书总结
官方文档

  Python写的自动化构建工具,类似于GNU make,实际中项目的代码量经常动辄几百万行,编译一次需要很久的时间,所以这种自动化构建工具就出现了,其实就是代替了我们手动去使用命令行编译代码,然后,遇到代码文件没有改动的情况下,就只重新编译发生了变化的文件,可以极大地缩小编译的时间。
  scons由Sconstruct作为入口,控制如何进行编译操作,相当于是一个python文件,遵从python的语法。

Program("hello.cpp")

Program是Scons中的一个编译方法(builder_method), 告诉Scons 我们想要把hello.cpp 编译成一个可执行文件。
其实就是代替作了下面的命令行编译

g++ -o hello.o -c hello.cpp
g++ -o hello hello.o

如果需要编译多个文件,就使用一个list,将所有需要编译的文件写到里面去

除此之外,还可以将文件编译为一个库;

Library("t", Glob("src/*.cpp"))

亦可以链接使用

source = Glob("src/*.cpp")
SharedLibrary("t", source)
Program(["hello.cpp"], LIBS=["t"], LIBPATH=".")

判断是否需要重新编译:是通过文件修改时间、md5值来判断

更多的是需要通过在实际运用中,遇到了不知道就去查询官方的文档,以及一些人的总结,来搞明白用途。总体来说,scons就是用来控制大型项目编译的一个东西,然后可能每一个模块是一个文件夹,每一个模块里面都需要有自己的一个Sconstruct文件;

linux下各级目录

~ 用户目录
/ 根目录
. 当前目录
.. 上一级目录

命令空间namespace

参考链接1
  在最近的实习中,发现了公司里面的程序,都是使用命名空间里面定义类的方式,以前只知道一个using namespace std,然后总会遇到同名的烦恼,通过一番了解才知道,命名空间就是用于解决这个问题的法宝。

  记得之前解决项目中一个问题的时候,需要定义两个类,分别用于解决全速和半速的解调问题,然后在两个类里面,使用到了相同的函数,只是一些全局的参数不一样,除此之外,还有一些全局的辅助函数,当时,编译的时候,遇到了命名冲突的问题,采用的方法是,将半速类里面的函数都加一个_half的后缀,其实现在看来,完全不用这样,完全可以直接使用两个命名空间完事,然后在使用的时候,加一个作用域的限定就行了;我想这也是为什么实际代码里用到了命名空间的最主要原因吧。