0 废话在前
近日想要同时使用Qt和Opencv来完成一个小项目,但是在Qtcreator里面配置Opencv太麻烦,而且考虑到以后也有可能加入更多的第三方库,因此干脆用cmake来进行管理。
目前CSDN上的教程基本都是一大抄,并且有许多错误之处,因此干脆自己摸索着写了一版。
观看本教程之前,最好有一定的cmake和Qt编程基础。
1 Qt编译过程
众所周知,C++编译四大步骤:预处理、编译、汇编、链接。
Qt当然也逃不出这四步,但是Qt也要增加一个步骤。原因在于Qt有其相应的语法扩展,比如在使用到自定义的信号与槽函数的时候,我们需要在头文件中定义类时需要在头部加上“Q_OBJECT”这个宏,但标准的C++编译器可看不懂这是什么意思,因此需要在第一步预处理之前先使用Qt的预编译器MOC来处理Qt中的扩展语法,比如Q_OBJECT,slot,signal,emit等。
举个简单的例子就是,如果你的头文件中含有Q_OBJECT这个宏,那么标准的C++编译器会在预处理的时候会将这个头文件原封不动的放入源文件之中,同时也会记录Q_OBJECT这个宏,注意,仅仅是记录,编译器不知道这是什么意思,只是先不报错,最后会再链接这一步当中去链接的其他文件中找这个宏的定义,因此MOC的作用就是生成一个新的.cpp文件,具体定义了这个宏,最后在链接到我们的源文件之中,编译器就能通过这个文件知道这个宏是什么意思了。