先得看看这两个选项做了什么,上网搜到的如下:
"NDEBUG"是一个标准的 ANSI宏,表示不进行调试编译。
大多数程序和库在编译时默认的优化级别是"2"(使用"-O2"选项)并且带有调试符号来编译,也就是 CFLAGS="-O2 -g", CXXFLAGS=$CFLAGS 。事实上,"-O2"已经启用绝大多数安全的优化选项了。
先说说"-O3"在"-O2"基础上增加的几项:
-finline-functions
允许编译器选择某些简单的函数在其被调用处展开,比较安全的选项,特别是在CPU二级缓存较大时建议使用。
-funswitch-loops
将循环体中不改变值的变量移动到循环体之外。
-fgcse-after-reload
为了清除多余的溢出,在重载之后执行一个额外的载入消除步骤。
同样的,我也加入了这两个编译优化选项,这时候编译运行起来速度就和作者的一样了。然后我上网搜了一下,发现"-O3"和"-O2"的优化选项各有利弊啊,所以我就修改为"-O2"试了一下,发现速度并没有降下来。不过我觉得作者应该是考虑到代码的一些问题,才用"-O3",我是一个菜鸟,暂时还不能理解怎么深度的问题,呵呵,所以还是按作者的先用着吧。
3、附上编译TLD的Makefile文件:
CXX=g++
AR=ar
GPATH=src lib
VPATH=src lib
CPPFLAGS= -O3 -DNDEBUG `pkg-config --cflags OpenCV` -Iinclude
LDFLAGS=-Llib
LIBS=`pkg-config --libs opencv`
SLIBS=lib/libTLD.a lib/libFerNNClassifier.a lib/libLKTracker.a lib/libtld_utils.a
OBJECTS=run_tld.o
TARGET=run_tld
$(TARGET):$(OBJECTS) $(SLIBS)
$(CXX) $^ $(LDFLAGS) $(SLIBS) $(LIBS) -o $@
lib/libTLD.a:TLD.o
$(AR) rc $@ $<
lib/libFerNNClassifier.a:FerNNClassifier.o
$(AR) rc $@ $<