Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

General updates

  • Loading branch information...
commit 1305ae2f9fc91ca28ffed70c15c6d4e2286ebed6 1 parent f557560
@bmcdorman bmcdorman authored
View
24 include/project/linked_kar.hpp
@@ -0,0 +1,24 @@
+#ifndef _LINKED_KAR_HPP_
+#define _LINKED_KAR_HPP_
+
+#include <kar.hpp>
+
+namespace Kiss
+{
+ namespace Project
+ {
+ class LinkedKar
+ {
+ public:
+
+ static bool addLink(const Kiss::KarPtr &archive, const QString &path);
+ static bool removeLink(const Kiss::KarPtr &archive, const QString &path);
+ static QStringList links(const Kiss::KarPtr &archive);
+
+ private:
+ LinkedKar();
+ };
+ }
+}
+
+#endif
View
10 include/project/project.hpp
@@ -22,9 +22,11 @@ namespace Kiss
public:
typedef QMap<QString, QString> Settings;
- bool addFile(const QString& path);
+ bool linkFile(const QString &path);
+ bool copyFile(const QString& path);
bool removeFile(const QString& path);
QStringList files() const;
+ QStringList links() const;
void setSettings(const Settings& settings);
const Settings& settings() const;
@@ -32,7 +34,7 @@ namespace Kiss
void setSetting(const QString& key, const QString& value);
void removeSetting(const QString& key);
- const QString& location() const;
+ const QString &location() const;
bool save();
static ProjectPtr create(const QString& location);
@@ -47,13 +49,11 @@ namespace Kiss
private:
Project(const QString& location);
-
void refresh(const QString& location);
QString m_location;
-
- QStringList m_files;
Settings m_settings;
+ Kiss::KarPtr m_archive;
};
}
}
View
51 include/project/project_model.hpp
@@ -1,52 +1,27 @@
-#ifndef _PROJECT_MODEL_HPP_
-#define _PROJECT_MODEL_HPP_
-
-#include "project.hpp"
+#ifndef _KAR_MODEL_HPP_
+#define _KAR_MODEL_HPP_
#include <QStandardItemModel>
-#include <QFileSystemWatcher>
-#include <QString>
-#include <QStringList>
-#include <QObject>
+#include <QModelIndex>
+
+#include "project.hpp"
namespace Kiss
{
namespace Project
{
- class MultiRootFilesystemModel : public QStandardItemModel
+ class Model : public QStandardItemModel
{
Q_OBJECT
public:
- MultiRootFilesystemModel(QObject *parent = 0);
-
- void addRootPath(const QString& path);
- void removeRootPath(const QString& path);
- const QStringList& rootPaths() const;
-
- private slots:
- void pathChanged(const QString& path);
- void itemChanged(QStandardItem *item);
-
- private:
- QStringList m_paths;
- QFileSystemWatcher m_watcher;
- };
-
- class Model : public MultiRootFilesystemModel
- {
- Q_OBJECT
- public:
- Model();
+ Model(QObject *parent = 0);
~Model();
-
- Kiss::Project::ProjectPtr indexToProject(const QModelIndex& index) const;
- bool isIndexProject(const QModelIndex& index) const;
- QString indexToPath(const QModelIndex& index) const;
-
- void addProject(const Kiss::Project::ProjectPtr& project);
- void removeProject(const Kiss::Project::ProjectPtr& project);
- private:
- QMap<QString, Kiss::Project::ProjectPtr> m_projects;
+
+ bool isLink(const QModelIndex &index) const;
+ bool isFile(const QModelIndex &index) const;
+ bool isProjectRoot(const QModelIndex &index) const;
+ QString filePath(const QModelIndex &index) const;
+ ProjectPtr project(const QModelIndex &index) const;
};
}
}
View
5 plugins/interfaces/kovan_serial/kovan_serial_interface.cpp
@@ -34,7 +34,9 @@ void PortSampler::run()
QFileInfoList list = dir.entryInfoList(QStringList() << "tty.usbmodem*", QDir::System);
foreach(const QFileInfo &info, list) paths << info.filePath();
#elif defined(Q_OS_WIN)
- qDebug() << "Device discovery not yet implemented for windows!";
+ for(int i = 0; i < 15; ++i) paths << QString("COM%1").arg(i);
+#else
+ qWarning() << "Serial port enumeration NYI for your platform";
#endif
foreach(const QString &path, paths) {
UsbSerial usb(path.toAscii());
@@ -96,6 +98,7 @@ void KovanSerialInterface::found(const QString &port)
UsbSerial *serial = new UsbSerial(port.toAscii());
KovanProtoTarget *device = new Kiss::Target::KovanProtoTarget(serial, this);
+ device->fillCommPort(port);
m_responder->targetFound(this, TargetPtr(device));
}
View
5 plugins/interfaces/shared/kovan_proto_target.cpp
@@ -28,6 +28,11 @@ void KovanProtoTarget::fillDisplayName(const QString &displayName)
m_information[DISPLAY_NAME] = displayName;
}
+void KovanProtoTarget::fillCommPort(const QString &commPort)
+{
+ m_information[SERIAL] = commPort;
+}
+
void KovanProtoTarget::fillInformation(const Advert &advert)
{
m_information[DISPLAY_NAME] = advert.name;
View
1  plugins/interfaces/shared/kovan_proto_target.hpp
@@ -23,6 +23,7 @@ namespace Kiss
~KovanProtoTarget();
void fillDisplayName(const QString &displayName);
+ void fillCommPort(const QString &commPort);
void fillInformation(const Advert &advert);
virtual const QMap<QString, QString> information() const; // Needs to be cached
View
3  src/interface/target_model.cpp
@@ -14,7 +14,8 @@ class TargetItem : public QStandardItem
{
public:
TargetItem(TargetPtr target)
- : QStandardItem(target->displayName()), m_target(target)
+ : QStandardItem(target->displayName().isEmpty() ? target->commPort()
+ : target->displayName()), m_target(target)
{
setEditable(false);
setIcon(ResourceHelper::ref().icon("default_target"));
View
28 src/main_window.cpp
@@ -585,7 +585,7 @@ void MainWindow::on_ui_tabWidget_currentChanged(int i)
void MainWindow::on_ui_addFile_clicked()
{
- Project::ProjectPtr project = activeProject();
+ /*Project::ProjectPtr project = activeProject();
if(!project) {
Dialog::Message::showError(this, "simple_error", QStringList() <<
tr("Unable to determine active project.") <<
@@ -595,17 +595,17 @@ void MainWindow::on_ui_addFile_clicked()
SourceFile* source = new SourceFile(this);
source->setProject(project);
- addTab(source);
+ addTab(source);*/
}
void MainWindow::on_ui_removeFile_clicked()
{
- foreach(const QModelIndex& index, ui_projects->selectionModel()->selectedRows()) {
+ /*foreach(const QModelIndex& index, ui_projects->selectionModel()->selectedRows()) {
Project::ProjectPtr project = m_projectsModel.indexToProject(index);
if(m_projectsModel.isIndexProject(index)) {
m_projectManager.closeProject(project);
}
- }
+ }*/
}
void MainWindow::projectAddNew()
@@ -615,7 +615,7 @@ void MainWindow::projectAddNew()
void MainWindow::projectAddExisting()
{
- Project::ProjectPtr project = activeProject();
+ /* Project::ProjectPtr project = activeProject();
if(!project) return;
QString openPath = QSettings().value(OPEN_PATH, QDir::homePath()).toString();
QStringList filters = Lexer::Factory::ref().formattedExtensions();
@@ -623,7 +623,7 @@ void MainWindow::projectAddExisting()
filters.removeDuplicates();
QStringList files = QFileDialog::getOpenFileNames(this, tr("Select One or More Files to Add"),
openPath, filters.join(";;") + ";;All Files (*)");
- foreach(const QString& file, files) project->addFile(file);
+ foreach(const QString& file, files) project->copyFile(file); */
}
void MainWindow::projectRemoveExisting()
@@ -734,24 +734,24 @@ void MainWindow::projectClicked(const QModelIndex& index)
void MainWindow::projectFileClicked(const QModelIndex& index)
{
- if(m_projectsModel.isIndexProject(index)) return;
+ /* if(m_projectsModel.isIndexProject(index)) return;
QString path = m_projectsModel.indexToPath(index);
- openFile(path, m_projectsModel.indexToProject(index));
+ openFile(path, m_projectsModel.indexToProject(index));*/
}
void MainWindow::projectOpened(const Project::ProjectPtr& project)
{
- Project::Manager *manager = qobject_cast<Project::Manager *>(sender());
+ /*Project::Manager *manager = qobject_cast<Project::Manager *>(sender());
m_projectsModel.addProject(project);
- if(manager) ui_projectFrame->setVisible(manager->projects().size());
+ if(manager) ui_projectFrame->setVisible(manager->projects().size());*/
}
void MainWindow::projectClosed(const Project::ProjectPtr& project)
{
- closeProjectTabs(project);
+ /*closeProjectTabs(project);
m_projectsModel.removeProject(project);
Project::Manager *manager = qobject_cast<Project::Manager *>(sender());
- if(manager) ui_projectFrame->setVisible(manager->projects().size());
+ if(manager) ui_projectFrame->setVisible(manager->projects().size());*/
}
bool MainWindow::eventFilter(QObject *target, QEvent *event) {
@@ -872,8 +872,8 @@ Project::ProjectPtr MainWindow::activeProject() const
if(loadedProjects.size() == 0) return Project::ProjectPtr();
if(loadedProjects.size() == 1) return loadedProjects[0];
- const QModelIndexList& list = ui_projects->selectionModel()->selectedRows();
if(m_currentTab && m_currentTab->hasProject()) return m_currentTab->project();
- return list.size() > 0 ? m_projectsModel.indexToProject(list[0]) : Project::ProjectPtr();
+ const QModelIndexList& list = ui_projects->selectionModel()->selectedRows();
+// return list.size() > 0 ? m_projectsModel.indexToProject(list[0]) : Project::ProjectPtr();
return Project::ProjectPtr();
}
View
15 src/menus/file_operations_menu.cpp
@@ -5,10 +5,14 @@ using namespace Kiss::Menu;
FileOperationsMenu::FileOperationsMenu()
: ConcreteMenuable(menuName())
{
- Node* newFile = node(activeAction(ResourceHelper::ref().icon("page_white.png"), "File", QKeySequence("Ctrl+Shift+N"), this, "newFile"));
- Node* newProject = node(activeAction(ResourceHelper::ref().icon("brick.png"), "Project", QKeySequence::New, this, "newProject"));
- Node* newTemplatePack = node(activeAction(ResourceHelper::ref().icon("package"), "Template Pack", QKeySequence::UnknownKey, this, "newTemplatePack"));
- Node* openFile = node(activeAction(ResourceHelper::ref().icon("folder"), "Open...", QKeySequence::Open, this, "open"));
+ Node* newFile = node(activeAction(ResourceHelper::ref().icon("page_white.png"), "New File",
+ QKeySequence::New, this, "newFile"));
+ Node* newProject = node(activeAction(ResourceHelper::ref().icon("brick.png"), "New Project",
+ QKeySequence("Ctrl+Shift+N"), this, "newProject"));
+ Node* newTemplatePack = node(activeAction(ResourceHelper::ref().icon("package"), "New Template Pack",
+ QKeySequence::UnknownKey, this, "newTemplatePack"));
+ Node* openFile = node(activeAction(ResourceHelper::ref().icon("folder"), "Open...",
+ QKeySequence::Open, this, "open"));
Node* newSubmenu = node(action(ResourceHelper::ref().icon("page_white.png"), "New"));
newSubmenu->children.append(newFile);
@@ -17,7 +21,8 @@ FileOperationsMenu::FileOperationsMenu()
newSubmenu->children.append(newTemplatePack);
Node* importSubmenu = node(action(ResourceHelper::ref().icon("bullet_go.png"), "Import"));
- Node* importTemplatePack = node(activeAction(ResourceHelper::ref().icon("package"), "Template Pack", QKeySequence::UnknownKey, this, "importTemplatePack"));
+ Node* importTemplatePack = node(activeAction(ResourceHelper::ref().icon("package"), "Template Pack",
+ QKeySequence::UnknownKey, this, "importTemplatePack"));
importSubmenu->children.append(importTemplatePack);
m_file.append(newSubmenu);
View
47 src/project/linked_kar.cpp
@@ -0,0 +1,47 @@
+#include "linked_kar.hpp"
+
+#define LINK_FILE (KAR_SPECIAL_PREFIX "links")
+#define SEP "\n"
+
+using namespace Kiss;
+using namespace Kiss::Project;
+
+bool LinkedKar::addLink(const Kiss::KarPtr &archive, const QString &path)
+{
+ if(archive.isNull()) return false;
+ QByteArray data = archive->data(LINK_FILE);
+ data += path + SEP;
+ archive->setFile(LINK_FILE, data);
+ return true;
+}
+
+bool LinkedKar::removeLink(const Kiss::KarPtr &archive, const QString &path)
+{
+ if(archive.isNull()) return false;
+
+ QStringList lines = links(archive);
+ QStringList newLines;
+
+
+ bool hit = false;
+ foreach(const QString &line, lines) {
+ if(line == path) {
+ hit = true;
+ continue;
+ }
+ newLines << line;
+ }
+
+ archive->setFile(LINK_FILE, newLines.join(SEP).toUtf8());
+ return hit;
+}
+
+QStringList LinkedKar::links(const Kiss::KarPtr &archive)
+{
+ if(archive.isNull()) return QStringList();
+ return QString(archive->data(LINK_FILE)).split(SEP);
+}
+
+LinkedKar::LinkedKar()
+{
+}
View
33 src/project/project.cpp
@@ -9,22 +9,23 @@
using namespace Kiss;
using namespace Kiss::Project;
-bool Kiss::Project::Project::addFile(const QString& path)
+bool Kiss::Project::Project::copyFile(const QString& path)
{
- return false;
+ qWarning() << "NYI: copyFile";
+ return false; // m_archive->addFile();
}
bool Kiss::Project::Project::removeFile(const QString& path)
{
- return QFile::remove(m_location + "/" + path);
+ return m_archive->removeFile(path);
}
QStringList Kiss::Project::Project::files() const
{
- return m_files;
+ return m_archive->files();
}
-void Kiss::Project::Project::setSettings(const Kiss::Project::Project::Settings& settings)
+void Kiss::Project::Project::setSettings(const Kiss::Project::Project::Settings &settings)
{
m_settings = settings;
}
@@ -51,12 +52,11 @@ const QString& Kiss::Project::Project::location() const
bool Kiss::Project::Project::save()
{
- QFile settingsFile(m_location + "/" + PROJECT_SETTINGS_FILE);
- if(!settingsFile.open(QIODevice::WriteOnly)) return false;
- QDataStream settingsStream(&settingsFile);
- settingsStream << m_settings; // TODO: Make plain text
- settingsFile.close();
- return true;
+ QByteArray data;
+ QDataStream stream(&data, QIODevice::WriteOnly);
+ stream << m_settings; // TODO: Make plain text
+ m_archive->setFile(PROJECT_SETTINGS_FILE, data);
+ return m_archive->save(m_location);
}
ProjectPtr Kiss::Project::Project::create(const QString& location)
@@ -67,7 +67,7 @@ ProjectPtr Kiss::Project::Project::create(const QString& location)
ProjectPtr Kiss::Project::Project::load(const QString& location)
{
- if(!QFileInfo(location).isDir()) return ProjectPtr();
+ if(!QFileInfo(location).isFile()) return ProjectPtr();
return ProjectPtr(new Project(location));
}
@@ -86,16 +86,9 @@ void Kiss::Project::Project::refresh()
void Kiss::Project::Project::refresh(const QString& location)
{
- QFileInfoList files = QDir(location).entryInfoList(QDir::NoDot | QDir::NoDotDot);
- foreach(const QFileInfo& file, files) {
- if(file.fileName() == PROJECT_SETTINGS_FILE) continue;
-
- if(file.isDir()) refresh(file.filePath());
- else m_files << file.filePath();
- }
}
Kiss::KarPtr Kiss::Project::Project::archive() const
{
- return Kar::create(m_location);
+ return m_archive;
}
View
216 src/project/project_model.cpp
@@ -1,233 +1,111 @@
#include "project_model.hpp"
-#include "project.hpp"
+
+#include "linked_kar.hpp"
#include <QFileInfo>
-#include <QFileIconProvider>
-#include <QDir>
using namespace Kiss;
using namespace Kiss::Project;
-class PathItem : public QStandardItem
+class ProjectRoot : public QStandardItem
{
public:
- PathItem(const QString& path)
- : QStandardItem(QFileInfo(path).fileName()),
- m_path(path)
+ ProjectRoot(const ProjectPtr &project)
+ : QStandardItem(QFileInfo(project->location()).fileName()),
+ m_project(project)
{
- refresh();
}
- const QString& path()
+ ~ProjectRoot()
{
- return m_path;
}
- bool rename(const QString& name)
+ const ProjectPtr &project() const
{
- QFileInfo info(m_path);
- if(!QDir(info.absolutePath()).rename(info.fileName(), name)) return false;
- m_path = info.absolutePath() + "/" + name;
- return true;
- }
-
- void setPath(const QString& path)
- {
- m_path = path;
- refresh();
- }
-
- virtual void refresh()
- {
- QFileIconProvider ip;
- setIcon(ip.icon(QFileInfo(m_path)));
+ return m_project;
}
template<typename T>
- static PathItem *pathitem_cast(T *item)
+ static ProjectRoot *cast(T *t)
{
- return dynamic_cast<PathItem *>(item);
+ return dynamic_cast<ProjectRoot *>(t);
}
private:
- QString m_path;
+ ProjectPtr m_project;
};
-class FileItem : public PathItem
+class ProjectFile : public QStandardItem
{
public:
- FileItem(const QString& path)
- : PathItem(path)
- {
- refresh();
- setEditable(false);
- }
-
- virtual void refresh()
- {
- PathItem::refresh();
- }
-
- template<typename T>
- static FileItem *fileitem_cast(T *item)
- {
- return dynamic_cast<FileItem *>(item);
- }
-};
-
-class FolderItem : public PathItem
-{
-public:
- FolderItem(const QString& path)
- : PathItem(path)
+ ProjectFile(const QString &path)
+ : QStandardItem(QFileInfo(path).fileName()),
+ m_path(path)
{
- refresh();
}
- QDir dir()
+ ~ProjectFile()
{
- return QDir(path());
}
- virtual void refresh()
+ const QString &path() const
{
- PathItem::refresh();
- for(int i = 0; i < rowCount(); ++i) removeRow(i--);
- QFileInfoList entries = dir().entryInfoList(QDir::Dirs | QDir::Files
- | QDir::NoDot | QDir::NoDotDot);
- foreach(const QFileInfo& entry, entries) {
- appendRow(entry.isDir() ? (PathItem *)new FolderItem(entry.absoluteFilePath())
- : (PathItem *)new FileItem(entry.absoluteFilePath()));
- }
+ return m_path;
}
template<typename T>
- static FolderItem *folderitem_cast(T *item)
- {
- return dynamic_cast<FolderItem *>(item);
- }
-};
-
-class RootItem : public FolderItem
-{
-public:
- RootItem(const QString& path)
- : FolderItem(path)
+ static ProjectFile *cast(T *t)
{
- setEditable(false);
+ return dynamic_cast<ProjectFile *>(t);
}
- template<typename T>
- static RootItem *rootitem_cast(T *item)
- {
- return dynamic_cast<RootItem *>(item);
- }
+private:
+ QString m_path;
};
-
-
-MultiRootFilesystemModel::MultiRootFilesystemModel(QObject *parent)
+Model::Model(QObject *parent)
: QStandardItemModel(parent)
{
- connect(&m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(pathChanged(QString)));
- connect(&m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(pathChanged(QString)));
- connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(itemChanged(QStandardItem *)));
-}
-
-void MultiRootFilesystemModel::pathChanged(const QString& path)
-{
- QString absolutePath = QFileInfo(path).absoluteFilePath();
- QStandardItem *root = invisibleRootItem();
- for(int i = 0; i < root->rowCount(); ++i) {
- QStandardItem *child = root->child(i);
- PathItem *pathItem = PathItem::pathitem_cast(child);
- if(!pathItem) continue;
- if(pathItem->path() == absolutePath || pathItem->path() == path) pathItem->refresh();
- }
-}
-
-void MultiRootFilesystemModel::addRootPath(const QString& path)
-{
- if(m_paths.contains(path)) return;
- m_paths.append(path);
- insertRow(0, new RootItem(QFileInfo(path).absoluteFilePath()));
- m_watcher.addPath(path);
-}
-
-void MultiRootFilesystemModel::removeRootPath(const QString& path)
-{
- m_paths.removeAll(path);
- m_watcher.removePath(path);
-
- QString absolutePath = QFileInfo(path).absoluteFilePath();
-
- QStandardItem *root = invisibleRootItem();
- for(int i = 0; i < root->rowCount(); ++i) {
- QStandardItem *child = root->child(i);
- PathItem *pathItem = PathItem::pathitem_cast(child);
- if(!pathItem) continue;
- if(pathItem->path() == absolutePath || pathItem->path() == path) root->takeRow(i--);
- }
-}
-
-const QStringList& MultiRootFilesystemModel::rootPaths() const
-{
- return m_paths;
-}
-
-void MultiRootFilesystemModel::itemChanged(QStandardItem *item)
-{
- PathItem *pathItem = PathItem::pathitem_cast(item);
- if(!pathItem) return;
- pathItem->rename(pathItem->text());
-}
-
-Model::Model()
-{
-
}
Model::~Model()
{
- m_projects.clear();
}
-Kiss::Project::ProjectPtr Model::indexToProject(const QModelIndex& index) const
+bool Model::isLink(const QModelIndex &index) const
{
- PathItem *pathItem = PathItem::pathitem_cast(itemFromIndex(index));
- if(!pathItem) return ProjectPtr();
- ProjectPtr ret;
- QString path = pathItem->path();
- while(ret.isNull() && !path.isEmpty()) {
- ret = m_projects.value(path);
- path = QFileInfo(path).path();
- }
- return ret;
+ QStandardItem *item = itemFromIndex(index);
+ ProjectFile *projectFile = ProjectFile::cast(item);
+ if(!projectFile) return false;
+ return LinkedKar::links(project(index)->archive()).contains(projectFile->path());
}
-bool Model::isIndexProject(const QModelIndex& index) const
+bool Model::isFile(const QModelIndex &index) const
{
- return RootItem::rootitem_cast(itemFromIndex(index));
+ return ProjectFile::cast(itemFromIndex(index));
}
-QString Model::indexToPath(const QModelIndex& index) const
+bool Model::isProjectRoot(const QModelIndex &index) const
{
- PathItem *pathItem = PathItem::pathitem_cast(itemFromIndex(index));
- if(!pathItem) return QString();
- return pathItem->path();
+ return ProjectRoot::cast(itemFromIndex(index));
}
-void Model::addProject(const Kiss::Project::ProjectPtr& project)
+QString Model::filePath(const QModelIndex &index) const
{
- const QString& location = project->location();
- if(m_projects.contains(location)) return;
- m_projects.insert(location, project);
- addRootPath(location);
+ ProjectFile *projectFile = ProjectFile::cast(itemFromIndex(index));
+ if(!projectFile) return QString();
+ return projectFile->path();
}
-void Model::removeProject(const Kiss::Project::ProjectPtr& project)
+ProjectPtr Model::project(const QModelIndex &index) const
{
- const QString& location = project->location();
- m_projects.remove(location);
- removeRootPath(location);
+ QStandardItem *item = itemFromIndex(index);
+ ProjectRoot *projectRoot = ProjectRoot::cast(item);
+ if(!projectRoot) {
+ ProjectFile *projectFile = ProjectFile::cast(item);
+ if(!projectFile) return ProjectPtr();
+ // TODO: This assumes a strictly two-level project model
+ projectRoot = ProjectRoot::cast(projectFile->parent());
+ }
+ return projectRoot ? projectRoot->project() : ProjectPtr();
}
View
4 tests/CMakeLists.txt
@@ -1,8 +1,8 @@
ADD_EXECUTABLE(output_widget_test output_widget_test.cpp)
TARGET_LINK_LIBRARIES(output_widget_test ${QT_LIBRARIES} kisside pcompiler kar)
-ADD_EXECUTABLE(project_model_test project_model_test.cpp)
-TARGET_LINK_LIBRARIES(project_model_test ${QT_LIBRARIES} kisside pcompiler kar)
+# ADD_EXECUTABLE(project_model_test project_model_test.cpp)
+# TARGET_LINK_LIBRARIES(project_model_test ${QT_LIBRARIES} kisside pcompiler kar)
ADD_EXECUTABLE(template_test template_test.cpp)
TARGET_LINK_LIBRARIES(template_test ${QT_LIBRARIES} kisside pcompiler kar)
Please sign in to comment.
Something went wrong with that request. Please try again.