Библиотека 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 существует и в нем нет синтаксических ошибок, произойдет компиляция в исполняемый файл в режиме оптимизации и последующий запуск приложения; иначе будет выведено сообщение о том, что компиляция не удалась.