Библиотека QtE5 очень удобная и нужная вещь, но иногда требуется добиться того, чтобы из некоторой среды разработки или какого-либо редактора можно было легко и быстро скомпилировать QtE5-приложение.
Дело обычно осложняется еще и тем, что после компиляции такого приложения, саму программу просто так не запустить требуется набор dll-файлов и картинок, которые распространяются вместе с QtE5.
Естественно, сразу возникает вариант копирования всех нужных файлов QtE5 в какую-нибудь уединенную папку, однако, постоянное перемещение исполняемых файлов в нее может весьма быстро надоесть…
Решить проблему можно написав свой собственный сборщик QtE5-приложений:
import std.file;
import std.path;
import std.process;
import std.stdio;
import std.string;
class QtECompiler
{
private
{
string sourceFileName;
}
this(string sourceFileName)
{
this.sourceFileName = sourceFileName;
}
void run()
{
if (sourceFileName.exists)
{
auto dmd = executeShell(`dmd -m32 -O -release ` ~ sourceFileName ~ ` qte5`);
if (dmd.output == "")
{
auto executableFile = sourceFileName.replace(`.d`, `.exe`);
if (executableFile.exists)
{
auto executableFileName = executableFile.baseName;
copy(executableFile, `D:\Sources of D libraries\QtE5\windows32\` ~ executableFileName);
auto exe = executeShell(`D:\Sources of D libraries\QtE5\windows32\` ~ executableFileName);
writeln(exe.output);
}
}
else
{
writeln(`Compilation failed !`);
writeln(dmd.output);
}
}
else
{
writefln(`File %s doesn't exist`, sourceFileName);
}
}
}
void main(string[] args)
{
QtECompiler compiler = new QtECompiler(args[1]);
compiler.run;
}
Эта небольшая программка предполагает, что минимальный runtime QtE5 находиться в папке “D:\Sources of D libraries\QtE5\windows32\” (замените этот путь на свой), куда и будет автоматически перемещен исполняемый файл приложения. В случае, если файл исходного кода на D существует и в нем нет синтаксических ошибок, произойдет компиляция в исполняемый файл в режиме оптимизации и последующий запуск приложения; иначе будет выведено сообщение о том, что компиляция не удалась.