Пишу, по большей части, про историю, свою жизнь и немного про программирование.

99 бутылок: CMake

57. 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.")

Строка для запуска во второй строке файла.

3 комментария
teegaar 2015

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

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

Евгений Степанищев (bolknote.ru) 2015

Комментарий для teegaar:

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

Евгений Степанищев (bolknote.ru) 2015

Комментарий для teegaar:

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