1 为什么要条件编译
因为我们的代码是在windows上开发,并通过git同步到liux上去,所以,为了保证同步后的代码能用,比如,在树莓派系统中需要使用wiribgPi这个库,但是在windows上,并没有这个库,所以,就需要条件编译
我们之前讲过,要使用wiringPi,你需要在.pro文件引用,而在windows,你引用wiringPi,肯定会爆异常,因为你没有这个库,所以,你需要条件编译:
另外,我们其实需要调用wiringPi的函数,但是,在Windows里面,你并没有这个函数,所以,也需要在类头文件和.cpp文件里面调通过条件编译去使用这个库
writetool.h:
#ifndef WRITETOOL_H
#define WRITETOOL_H
#define INPUT 0
#define OUTPUT 1
#define LOW 0
#define HIGH 1
class WriteTool
{
private:
static WriteTool * ins;
public:
WriteTool();
static WriteTool *Instance();
void setMode(int port,int value);
void setGPIO(int port,int value);
};
#endif // WRITETOOL_H
writetool.cpp
#include "writetool.h"
#include "sx.h"
#include <QtGlobal>
#ifdef Q_OS_LINUX
#include"wiringPi.h"
#endif
WriteTool* WriteTool::ins;
WriteTool::WriteTool()
{
ins = this;
#ifdef Q_OS_LINUX
wiringPiSetup();
#endif
#ifdef Q_OS_WIN32
// win
#endif
}
WriteTool* WriteTool::Instance(){
return ins;
}
void WriteTool::setMode(int port, int value){
#ifdef Q_OS_LINUX
pinMode(port,value);
#endif
#ifdef Q_OS_WIN32
// win
Sx::Instance()->debug("hello World");
#endif
}
void WriteTool::setGPIO(int port, int value){
#ifdef Q_OS_LINUX
digitalWrite(port,value);
#endif
}
我在windows端调用pinMode和digitalRite时:这是槽函数的实现,也就是点击一个按钮,调用task_01_001()
#include "processer.h"
#include "sx.h"
#include<QLabel>
#include"writetool.h"
Processer::Processer(QWidget *pt):
QLabel(pt)
{
}
Processer::Processer()
{
}
void Processer::task_01_001(){
for(int i =0;i<8;i++){
if(i%2 == 0){
WriteTool::Instance()->setMode(i,OUTPUT);
WriteTool::Instance()->setGPIO(i,HIGH);
}else{
WriteTool::Instance()->setMode(i,OUTPUT);
WriteTool::Instance()->setGPIO(i,LOW);
}
}
}
这样,我们就只需要维护windows端的代码就可以了,不用再同时维护liux和windows的代码,这对解决git的冲突有极大作用!!