Умное обновление рассчитанной переменной в зависимости от того, кто ее определил - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь создать нетривиальную конфигурацию проекта с разными переменными, где конкретный c должен быть рассчитан на основе другой переменной. Не всегда, но изначально, и если пользователь не установил вторую переменную из CLI, то при изменении первой переменной будет пересчитана первая. И если вторая переменная была установлена ​​вручную, то (и только тогда) она должна быть кэширована.

Кроме того, обе переменные должны появиться в cmake- gui, и они набираются в STRING.

Теперь подвох: для cmake- gui я должен использовать "CACHE STRING ..." spe c с директивой set. Что делает его липким таким образом, который я не могу контролировать (с помощью условий, упомянутых выше). Я могу сделать это условным предикатом (DEFINED (xxx)), но это также не дает правильных результатов (то есть не отображается в пользовательском интерфейсе, если пользователь не установил его, также после кэширования, и нет способа определить, был ли он переопределен пользователем снова или должен быть пересчитан из главной переменной).

Я мог бы представить какое-то решение, сравнив его с тем, что у нас было раньше в кеше, но я также не вижу способа получить старые значения кеша.

Так что Вопрос в том, что было бы лучшим способом написать такое интеллектуальное обновление?

# WRONG example
if(not defined(CMAKE_INSTALL_PREFIX))
        set(CMAKE_INSTALL_PREFIX "/opt/${ACME}")
    endif()
    if(not defined(ASSETDIR))
        set(ASSETDIR "${CMAKE_INSTALL_PREFIX}/assets/${ACME}")
    else()
        set(ASSETDIR "${CMAKE_INSTALL_PREFIX}/assets/${ACME}" CACHE STRING "Override path for assets")
    endif()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...