Крайне полезная информация по переменным 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.
Спасибо :)
Begemot
3 марта 10 10:41
Вот кстати и сразу вопрос по поводу правильной установки переменных. Кеш CMakа сводит меня с ума:)
Пытаюсь сделать так
set (CMAKE_CONFIGURATION_TYPES «Debug;Release» CACHE STRING «» FORCE)
установить переменную что бы убрать лишние конфигурации. есть два варианта
1. если кеша нет — запускаю первый раз или убил файл CMakeCache.txt — НЕ работает.
2. если кеш есть — работает.
Как делать правильно?
Иногда вносишь изменения которые должны привести к ошибкам, запускаешь cmake — все ок, изменяешь что-то в файле запускаешь опять — и тут вылазят ошибки прошлого раза. Подозреваю что опять что-то с кешем, но закономерность споймать не удалось:(
Begemot
3 марта 10 11:27
Сложно сказать, что делать :) Я честно говоря с такой ситуацией не сталкивался, то есть ни с кешем проблем не имел, ни убирать конфигурации не приходилось (зачем?). Было дело когда я пол часа правил CMAKE_CXX_FLAGS без какого либо эффекта, удалял кеш и все без результата, пока до меня не дошло, что собираемая программа написана на C. И правда изменения CMAKE_C_FLAGS тут же привели к нужному результату :)
Максим Тремпольцев
3 марта 10 12:20
>зачем?
ну
1. зачем мне мусор в виде двух лишних конфигураций?
2. я хочу переименовать конфигурации чтобы вывод был в /bin/VCRelease вместо /bin/Release что бы рядом еще могло лежать /bin/GCCRelease
3. мне надо добавить еще пару конфигураций, так что CMAKE_CONFIGURATION_TYPES все равно надо править.
Причины они разные бывают :)
Begemot
3 марта 10 12:52
1. Это не мусор. ZERO_CHECK обновляет проект при изменении CMakeLists.txt, а ALL_BUILD синоним стандартной цели all.
2. Ну да придется, а еще с CygWin придется подружить, я пока с этим не сталкивался.
Максим Тремпольцев
3 марта 10 14:14
1. Это не мусор. ZERO_CHECK обновляет проект при изменении CMakeLists.txt,
То есть ты не советуешь его запрещать?
2. а ALL_BUILD синоним стандартной цели all.
у меня нет такой стандартной цели:) проекты маленькие:)
Begemot
3 марта 10 14:45
1) Конечно не советую :)
2) Имеется в виду, что данная цель соберет все библиотеки и исполняемые файлы, иначе команду на сборку каждой цели давать придется самостоятельно.
Максим Тремпольцев
3 марта 10 20:07
2. В студии (мы же про нее сейчас говорим?) есть — ребилд солющен. И если запускать сборку ехе, который зависит от либы которая не собрана, студия помоему сама соберет если зависимости настроены, или я чего путаю?
p.s. очень не удобно что нет подписки на комментарии
Begemot
4 марта 10 0:33
Студия сама ни о чем не догадается и сделает ее ровно то, что ее просят. Вот для нее CMake создает несколько целей, в частности по цели для каждой библиотеки, цели для исполняемого файла и цель ALL_BUILD, которая выполнит все эти цели. Ребилд же сделает ровно одну вещь — вызовет цель clean, а потом ALL_BUILD.
P.S. Подумаю над этим :)
Максим Тремпольцев
4 марта 10 20:38
6f1q6n
Get free iPhone 15: https://furiousbyte.com/uploads/go.php hs=47af14c7e2bfad499d2b433a5e3e69f0*
11 ноября 23 15:02
9ae511
* * * GET FREE iPhone 15: https://jltaxprosllc.com/uploads/go.php * * * hs=47af14c7e2bfad499d2b433a5e3e69f0*
20 февраля 24 21:32