初步测试成功
This commit is contained in:
parent
3fed1d9180
commit
f29fbb9825
115
MainWidget.cpp
115
MainWidget.cpp
@ -21,10 +21,10 @@ void MainWidget::connect_operator()
|
|||||||
connect(ui->btnGenerate, &QPushButton::clicked, this, [=]() { generate(); });
|
connect(ui->btnGenerate, &QPushButton::clicked, this, [=]() { generate(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::control_init()
|
void MainWidget::control_init()
|
||||||
{
|
{
|
||||||
ui->plainTextEdit->setEnabled(false);
|
// ui->plainTextEdit->setEnabled(false);
|
||||||
#if !defined (NDEBUG)
|
#if !defined(NDEBUG)
|
||||||
ui->edBinary->setText("/home/typ/Downloads/build-QXmlEdit-Desktop_Qt_5_14_2_GCC_64bit-Release/build/qxmledit");
|
ui->edBinary->setText("/home/typ/Downloads/build-QXmlEdit-Desktop_Qt_5_14_2_GCC_64bit-Release/build/qxmledit");
|
||||||
ui->edQtDir->setText("/home/typ/Qt5.14.2/5.14.2/gcc_64");
|
ui->edQtDir->setText("/home/typ/Qt5.14.2/5.14.2/gcc_64");
|
||||||
ui->edOutDir->setText("/home/typ/testpack");
|
ui->edOutDir->setText("/home/typ/testpack");
|
||||||
@ -40,7 +40,51 @@ void MainWidget::add_env_btn()
|
|||||||
ui->listWidget->addItem(env);
|
ui->listWidget->addItem(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::simple_log(const QString& info) { ui->plainTextEdit->appendPlainText(info + "\n"); }
|
void MainWidget::simple_log(const QString& info, bool enter)
|
||||||
|
{
|
||||||
|
// dd
|
||||||
|
if (enter) {
|
||||||
|
ui->plainTextEdit->appendPlainText(info + "\n");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ui->plainTextEdit->appendPlainText(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将某个文件夹拷贝到制定目录下
|
||||||
|
bool MainWidget::copy_dir(const std::string& source_dir, const std::string& des_dir)
|
||||||
|
{
|
||||||
|
if (!fs::exists(source_dir) || !fs::exists(des_dir)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::path des_parent_dir = fs::path(des_dir).append(fs::path(source_dir).filename());
|
||||||
|
if (!fs::exists(des_parent_dir)) {
|
||||||
|
fs::create_directories(des_parent_dir);
|
||||||
|
}
|
||||||
|
std::list<fs::path> paths{};
|
||||||
|
for (const auto& entry : fs::directory_iterator(source_dir)) {
|
||||||
|
paths.push_back(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!paths.empty()) {
|
||||||
|
fs::path path = paths.front();
|
||||||
|
paths.pop_front();
|
||||||
|
|
||||||
|
fs::path destination(boost::replace_all_copy(path.string(), source_dir, des_parent_dir.string()));
|
||||||
|
if (fs::is_directory(path)) {
|
||||||
|
if (!fs::exists(destination)) {
|
||||||
|
fs::create_directories(destination);
|
||||||
|
}
|
||||||
|
for (const auto& entry : fs::directory_iterator(path)) {
|
||||||
|
paths.push_back(entry);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fs::copy_file(path, destination, fs::copy_options::overwrite_existing);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::string> MainWidget::get_depend_on(const std::string& name, const std::vector<std::string>& env)
|
std::vector<std::string> MainWidget::get_depend_on(const std::string& name, const std::vector<std::string>& env)
|
||||||
{
|
{
|
||||||
@ -68,25 +112,32 @@ std::vector<std::string> MainWidget::get_depend_on(const std::string& name, cons
|
|||||||
return vec;
|
return vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> MainWidget::handle_result(const std::vector<std::string>& vec)
|
std::list<std::string> MainWidget::handle_result(const std::vector<std::string>& vec)
|
||||||
{
|
{
|
||||||
std::vector<std::string> ret;
|
std::list<std::string> ret;
|
||||||
for (const auto& data : vec) {
|
for (const auto& data : vec) {
|
||||||
if (data.empty()) {
|
if (data.empty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (boost::contains(data, "not found")) {
|
||||||
|
simple_log(QString::fromStdString("未找到依赖:" + data), false);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
std::string tdata = boost::replace_all_copy(data, "=>", "");
|
std::string tdata = boost::replace_all_copy(data, "=>", "");
|
||||||
std::vector<std::string> vt;
|
std::vector<std::string> vt;
|
||||||
boost::split(vt, tdata, boost::is_any_of(" "));
|
boost::split(vt, tdata, boost::is_any_of(" "));
|
||||||
if (vt.size() != 4) {
|
if (vt.size() != 4) {
|
||||||
QString info = "长度不对,原始数据:\n" + QString::fromStdString(data);
|
// QString info = "原始数据:" + QString::fromStdString(data);
|
||||||
simple_log(info);
|
// simple_log(info, false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (boost::starts_with(vt[2], "/lib")) {
|
if (boost::starts_with(vt[2], "/lib")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ret.push_back(vt[2]);
|
ret.push_back(vt[2]);
|
||||||
|
// simple_log(QString::fromStdString(vt[2]), false);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -149,6 +200,7 @@ void MainWidget::generate()
|
|||||||
{
|
{
|
||||||
ui->plainTextEdit->clear();
|
ui->plainTextEdit->clear();
|
||||||
envs_.clear();
|
envs_.clear();
|
||||||
|
sos_.clear();
|
||||||
|
|
||||||
binary_ = ui->edBinary->text().trimmed();
|
binary_ = ui->edBinary->text().trimmed();
|
||||||
fs::path binary_dir = fs::path(binary_.toStdString()).parent_path();
|
fs::path binary_dir = fs::path(binary_.toStdString()).parent_path();
|
||||||
@ -161,4 +213,49 @@ void MainWidget::generate()
|
|||||||
|
|
||||||
auto retPrevious = get_depend_on(binary_.toStdString(), envs_);
|
auto retPrevious = get_depend_on(binary_.toStdString(), envs_);
|
||||||
auto result = handle_result(retPrevious);
|
auto result = handle_result(retPrevious);
|
||||||
|
|
||||||
|
std::vector<std::string> dynamic_so{};
|
||||||
|
std::copy(result.begin(), result.end(), std::back_inserter(dynamic_so));
|
||||||
|
|
||||||
|
// 处理 platform文件夹
|
||||||
|
std::list<fs::path> platform{};
|
||||||
|
fs::path qt_platform(ui->edQtDir->text().trimmed().toStdString());
|
||||||
|
qt_platform.append("plugins/platforms");
|
||||||
|
for (const auto& entry : fs::directory_iterator(qt_platform)) {
|
||||||
|
result.push_back(entry.path().string());
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!result.empty()) {
|
||||||
|
std::string bin = result.front();
|
||||||
|
result.pop_front();
|
||||||
|
auto tmp_retPrevious = get_depend_on(bin, envs_);
|
||||||
|
auto tmp_result = handle_result(tmp_retPrevious);
|
||||||
|
for (const auto& data : tmp_result) {
|
||||||
|
auto iter = std::find(dynamic_so.begin(), dynamic_so.end(), data);
|
||||||
|
if (iter != dynamic_so.end()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dynamic_so.push_back(data);
|
||||||
|
result.push_back(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::path out_dir(ui->edOutDir->text().trimmed().toStdString());
|
||||||
|
if (!fs::exists(out_dir)) {
|
||||||
|
fs::create_directories(out_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& data : dynamic_so) {
|
||||||
|
std::string purpose = fs::path(out_dir).append(fs::path(data).filename()).string();
|
||||||
|
fs::copy_file(data, purpose, fs::copy_options::overwrite_existing);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 复制platform文件夹
|
||||||
|
// fs::path qt_platform(ui->edQtDir->text().trimmed().toStdString());
|
||||||
|
// qt_platform.append("plugins/platforms");
|
||||||
|
// copy_dir(qt_platform.string(), out_dir.string());
|
||||||
|
|
||||||
|
// 复制主体文件
|
||||||
|
fs::path out_binary = fs::path(out_dir).append(fs::path(binary_.toStdString()).filename());
|
||||||
|
fs::copy_file(binary_.toStdString(), out_binary, fs::copy_options::overwrite_existing);
|
||||||
}
|
}
|
@ -33,11 +33,13 @@ private:
|
|||||||
void add_env_btn();
|
void add_env_btn();
|
||||||
void del_env_btn();
|
void del_env_btn();
|
||||||
void generate();
|
void generate();
|
||||||
void simple_log(const QString& info);
|
void simple_log(const QString& info, bool enter = true);
|
||||||
|
// 将某个文件夹拷贝到制定目录下
|
||||||
|
bool copy_dir(const std::string& source_dir, const std::string& des_dir);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::string> get_depend_on(const std::string& name, const std::vector<std::string>& env);
|
std::vector<std::string> get_depend_on(const std::string& name, const std::vector<std::string>& env);
|
||||||
std::vector<std::string> handle_result(const std::vector<std::string>& vec);
|
std::list<std::string> handle_result(const std::vector<std::string>& vec);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QString SelectDirectory(QWidget* parent, QLineEdit* pEdit, const QString& pre_path = "");
|
static QString SelectDirectory(QWidget* parent, QLineEdit* pEdit, const QString& pre_path = "");
|
||||||
@ -51,5 +53,6 @@ private:
|
|||||||
private:
|
private:
|
||||||
QString binary_{};
|
QString binary_{};
|
||||||
std::vector<std::string> envs_{};
|
std::vector<std::string> envs_{};
|
||||||
|
std::vector<std::string> sos_{};
|
||||||
};
|
};
|
||||||
#endif // MAINWIDGET_H
|
#endif // MAINWIDGET_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user