Личный опыт разработки ПО

Сборник рецептов

Полезные переменные CMake

комментариев 11

Крайне полезная информация по переменным CMake находится по адресу http://www.cmake.org/Wiki/CMake_Useful_Variables. После прочтения сами собой отпадают многие вопросы.

Ну и напомню, что содержимое переменной XXX можно посмотреть:

message (${XXX})

И изменить:

set (XXX ${XXX} значение)

А также проверить присутствует ли в переменной определенная подстрока:

if (XXX MATCHES "подстрока")
	...
endif ()

Если нужно изменить часть содержимого переменной (например флаг компилятора), то на помощь придут регулярные выражения:

string (REGEX REPLACE /W[0-4] /W4 CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})

В данном случае будет установлен максимальный уровень предупреждений /W4 для компилятора от Microsoft.

2nd Март 2010
23:14

Рубрика: Разработка,Сборка

Метки:

11 комментариев к 'Полезные переменные CMake'

Подписаться на комментарии по RSS или TrackBack.

  1. Спасибо :)

    Begemot

    3 марта 10 10:41

  2. Вот кстати и сразу вопрос по поводу правильной установки переменных. Кеш CMakа сводит меня с ума:)

    Пытаюсь сделать так
    set (CMAKE_CONFIGURATION_TYPES «Debug;Release» CACHE STRING «» FORCE)

    установить переменную что бы убрать лишние конфигурации. есть два варианта
    1. если кеша нет — запускаю первый раз или убил файл CMakeCache.txt — НЕ работает.
    2. если кеш есть — работает.

    Как делать правильно?

    Иногда вносишь изменения которые должны привести к ошибкам, запускаешь cmake — все ок, изменяешь что-то в файле запускаешь опять — и тут вылазят ошибки прошлого раза. Подозреваю что опять что-то с кешем, но закономерность споймать не удалось:(

    Begemot

    3 марта 10 11:27

  3. Сложно сказать, что делать :) Я честно говоря с такой ситуацией не сталкивался, то есть ни с кешем проблем не имел, ни убирать конфигурации не приходилось (зачем?). Было дело когда я пол часа правил CMAKE_CXX_FLAGS без какого либо эффекта, удалял кеш и все без результата, пока до меня не дошло, что собираемая программа написана на C. И правда изменения CMAKE_C_FLAGS тут же привели к нужному результату :)

  4. >зачем?
    ну
    1. зачем мне мусор в виде двух лишних конфигураций?
    2. я хочу переименовать конфигурации чтобы вывод был в /bin/VCRelease вместо /bin/Release что бы рядом еще могло лежать /bin/GCCRelease
    3. мне надо добавить еще пару конфигураций, так что CMAKE_CONFIGURATION_TYPES все равно надо править.

    Причины они разные бывают :)

    Begemot

    3 марта 10 12:52

  5. 1. Это не мусор. ZERO_CHECK обновляет проект при изменении CMakeLists.txt, а ALL_BUILD синоним стандартной цели all.
    2. Ну да придется, а еще с CygWin придется подружить, я пока с этим не сталкивался.

  6. 1. Это не мусор. ZERO_CHECK обновляет проект при изменении CMakeLists.txt,
    То есть ты не советуешь его запрещать?

    2. а ALL_BUILD синоним стандартной цели all.
    у меня нет такой стандартной цели:) проекты маленькие:)

    Begemot

    3 марта 10 14:45

  7. 1) Конечно не советую :)
    2) Имеется в виду, что данная цель соберет все библиотеки и исполняемые файлы, иначе команду на сборку каждой цели давать придется самостоятельно.

  8. 2. В студии (мы же про нее сейчас говорим?) есть — ребилд солющен. И если запускать сборку ехе, который зависит от либы которая не собрана, студия помоему сама соберет если зависимости настроены, или я чего путаю?

    p.s. очень не удобно что нет подписки на комментарии

    Begemot

    4 марта 10 0:33

  9. Студия сама ни о чем не догадается и сделает ее ровно то, что ее просят. Вот для нее CMake создает несколько целей, в частности по цели для каждой библиотеки, цели для исполняемого файла и цель ALL_BUILD, которая выполнит все эти цели. Ребилд же сделает ровно одну вещь — вызовет цель clean, а потом ALL_BUILD.
    P.S. Подумаю над этим :)

  10. 6f1q6n

  11. 9ae511

Оставить комментарий