«Песенка про пиво» на CMake

Писать «Песни про пиво» на различных языках программирования — давнее моё увлечение, ему столько же лет, сколько этому блогу. В этот раз «поёт» «Си-мэйк».

CMake — автоматизированная система сборки пакетов, имеющая развитый, хотя и несколько уродливый макроязык. Инструкции, большей частью, знакомые, разве что способ возврата значений несколько из макросов и функций несколько странный — через параметры и глобальные переменные.

Никакого ООП, само собой, и всё весьма примитивно по меркам развитых языков
# 99.cmake
# to run: cmake -P 99.cmake
# Written by Evgeny Stepanischev, 2015

cmake_minimum_required(VERSION 3.0)

macro(bottles beer ret)
	if(${beer} EQUAL 0)
		set(${ret} "No bottles")
	elseif(${beer} EQUAL 1)
		set(${ret} "1 bottle")
	else()
		set(${ret} "${${beer}} bottles")
	endif()
endmacro()

foreach(beer RANGE 99 1 -1)
	bottles(beer bottles)
	math(EXPR beer "${beer}-1")
	bottles(beer bottless)

	message("${bottles} of beer on the wall, ${bottles}.")
	message("Take one down and pass it around, ")
	message("${bottless} of beer on the wall.")
	message("")
endforeach()

message("No more bottles of beer on the wall, no more bottles of beer.")
message("Go to the store and buy some more, 99 bottles of beer on the wall.")
Строка для запуска во второй строке файла.
2 ноября 2015 21:00

teegaar (инкогнито)
3 ноября 2015, 19:50

Нет необходимости повторять условие в закрывающих конструкциях, можно писать endif(), endmacro() и endforeach().

А запускать можно командой "cmake -P имя_файла", тогда и мусора не будет.

bolknote.ru (bolknote.ru)
3 ноября 2015, 20:48, ответ предназначен teegaar

О, спасибо! Попробую и исправлю.

bolknote.ru (bolknote.ru)
4 ноября 2015, 03:13, ответ предназначен teegaar

Действительно, всё работает. Видимо документация по которой я разбирался старовата. Текст поправил.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)