C++XX в CMake

Вообще я очень люблю использовать CMake для создания различных небольших тестов. Собирается везде, ручной работы ощутимо меньше, чем если писать правила для Make, генерируется поддержка для любой IDE (если тестик в что-то более крупное перерастет и т.д). И как-то меня угораздило “проспать” как CMake 3.x так и довольно полезную фифу в нем – простое и понятное подключение поддержки C++11. Я всегда подключал C++11 по старинке:

list( APPEND CMAKE_CXX_FLAGS "-std=c++11")

Но, оказывается-то, прогресс шагнул далеко вперед! так что для тех кого так же как и меня “заморозили” сообщаю – все стало проще и понятнее:

cmake_minimum_required(VERSION 3.1 FATAL_ERROR) # (1)
project(cpp11_test)

add_executable(cpp11_test main.cpp)

set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)          # (2)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) # (3)

Прекрасная фича доступна начиная с CMake 3.1 1 и включается она 2 очень просто. Если какие-то обходные пути при отсутствии у компилятора поддержки C++11 не планируются, то стоит объявить 3 наличие поддержки C++11 обязательной.

4 Comments C++XX в CMake

  1. Владимир

    Вот что меня напрягает в CMake, так это то, что он состоит полностью из заклинаний, он декларативный до какой-то филологичности, нужно просто запомнить кучу ключевых слов, понять вывести логически – никак

    Reply
    1. Alexander Stavonin

      Да какой же он декларативный, если там и циклы и условия часто используются? Make – вот уж образец декларативности
      Мне больше всего не нравится в CMake не детерминированное поведение. Никогда не знаешь к чему приведет, к примеру, повторный запуск генерации скриптов на более-менее крупном проекте. Например у нас сейчас такая попытка приводит к ошибкам где-то в глубинах XCode %)

      Reply

Leave a Reply