Использование dub для приложений из одного *.d файла

Перечитывая документацию к dub, натолкнулся на одну интересную вещь, которая позволяет использовать dub для написания небольших приложений или скриптов. Дело в том, что в dub есть специальный режим для того случая, когда вся программа помещается в одном файле с исходным кодом, а это в свою очередь позволяет расширить сферу применения этого инструмента.

Таким образом, если есть один файл с исходным кодом, то «рецепт» для его сборки может быть помещен прямо в файл с исходным кодом в виде особой строки комментария. Этот комментарий в сочетании с синтаксисом shebang, применяемом для создания исполняемых файлов из обычных текстовых файлов с исходным кодом, позволяет сделать скрипт, который при этом сам себя скомпилирует и добавит нужные зависимости при необходимости.

Вот простой пример с библиотекой dlib:

#!/usr/bin/env dub
/+ dub.sdl:
	name "exp"
	dependency "dlib" version="~>0.17.0"
+/
void main() {
	import dlib.image;

	auto img = image(512, 512);

	foreach (i; 0..512)
	{
		img[i, i] = Color4f(0.5f, 0.5f, 0.9f);
	}

	img.savePNG(`test.png`);
}

Теперь достаточно просто сделать файл с этим исходным кодом исполняемым и dub автоматически установит зависимости и запустит скрипт на исполнение прямо из командной оболочки Linux !

Команда запуска в Linux:

./dub_exp.d

А что если мы хотим просто собрать приложение из одного файла, а не запускать его ?

Тогда, необходимо вызвать dub для сборки с единственным файлом, используя ключ пакетного менеджера —single:

dub build --single <имя_файла>

Также, допускается и сокращенная форма данной команды, которая просто позволяет опустить данный флаг и указать необходимый файл с кодом. Подобное верно не только для команды сборки build, но и для команды выполнения run, которая в добавление ко всему вышеописанному предоставляет возможность после имени файла указать аргументы командной строки, переадресуемые в само приложение.

Понимаю, что рецепт скромный, но иногда документация реально позитивно впечатляет…

P.S: Данный метод не сработает для создания библиотек из одного файла с исходным кодом.

aquaratixc

Программист-самоучка и программист-любитель

Добавить комментарий