如何告诉Qt Creator运行我的代码生成器以从xxx.txt文件生成xxx.h和xxx.cpp文件?

时间:2019-04-25 00:35:05

标签: qt cmake dependencies

我为代码编写了C ++代码生成器程序,该程序提供对QT中Sql表的访问。生成器获取一个简单的文本文件,并生成类头文件(.h)和类定义文件(.cpp)对。 QT Creator在我的项目中知道所有文件(并且受版本控制)。

当我更改输入文本文件时,我想运行我的代码生成器。然后,我将重新生成与之相对应的.h和.cpp文件。然后,在我构建时,该构建将自动编译.cpp文件。

我不知道如何使我的代码生成器进入QT Creator(cmake)构建过程。谁能帮我吗?

我可以通过选择每个输入文本文件并将其拖放到程序上来手动运行该过程。这是在QT Creator中添加构建步骤的功能。我将程序添加为“自定义处理步骤”,但是它不会选择每个输入文本文件,而是使用依赖项来决定是否运行。

典型的输入文本文件如下:

tablename=filepathtable,FP,dbt_filepath
filepath_id INTEGER PRIMARY KEY
drive_letter TEXT
file_path TEXT
full_path TEXT

代码生成器创建如下的头文件:

#ifndef DBT_FILEPATH_H
#define DBT_FILEPATH_H

// DO NOT EDIT THIS FILE! File was generated by dbtable_qt.ahk

#include "dbmanager.h"
#include <QString>
#include <QSqlQuery>
#include <QSqlError>

class Dbt_Filepath
{
public:
    Dbt_Filepath(QSqlDatabase* p_db);
    bool createFPTable();
    bool insertFPTable();
  bool queryFPTablePrimaryKey(int p_filepath_id);

    void debugShowSqlQueryError(const QLatin1String& funcname,
                                QSqlQuery& query);
    const QString getTableName();

    // database table fields
    int filepath_id;
    QString drive_letter;
    QString file_path;
    QString full_path;
    enum eFP_dbcol{
          field_filepath_id=0,
          field_drive_letter,
          field_file_path,
          field_full_path };

    // private data and functions
private:
    QSqlDatabase* m_db;    // database
    void fillFieldsFromQuery(QSqlQuery& query);

};

#endif    // DBT_FILEPATH_H

以及如下所示的.cpp文件(部分显示):

// DO NOT EDIT THIS FILE! File was generated by dbtable_qt.ahk

#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include "dbt_filepath.h"

Dbt_Filepath::Dbt_Filepath(QSqlDatabase* p_db)
 : m_db(p_db)
{
}

const QString Dbt_Filepath::getTableName()
{
     const QString tblnm = QLatin1String("filepathtable");
     return tblnm;
}

bool Dbt_Filepath::createFPTable()
{
  bool success = false;
  const QLatin1String fname("DFP::createFPTable()");
  qDebug() << fname;
  QSqlQuery querycreate(*m_db);
  QString sqlcreate = QLatin1String(
          "CREATE TABLE filepathtable ("
          "filepath_id INTEGER PRIMARY KEY,"
          "drive_letter TEXT,"
          "file_path TEXT,"
          "full_path TEXT"
          ");"  );

  querycreate.prepare(sqlcreate);
  if (querycreate.exec())
    success = true;
  else
    debugShowSqlQueryError(fname, querycreate);
  return success;
}

bool Dbt_Filepath::insertFPTable()
{
  bool success = false;
  const QLatin1String fname("DFP::insertFPTable()");
  qDebug() << fname;
  QSqlQuery queryinsert(*m_db);
  QString sqlinsert = QLatin1String(
"INSERT INTO filepathtable ("
          "drive_letter,"
          "file_path,"
          "full_path"

           ") VALUES(?,?,?);");
  queryinsert.prepare(sqlinsert);
  queryinsert.addBindValue(drive_letter.toUtf8());
...

我想要的是在编译过程中使用编译器将输入文本文件用作源的构建过程,以便在需要时重新生成c ++文件。然后,我想在正常的构建过程中继续编译和链接我的代码。

0 个答案:

没有答案