Реализовать условную СИЛУ в CMake - PullRequest
0 голосов
/ 28 июня 2018

Я реализовал схему, которая позволяет мне определять, была ли изменена переменная CACHE MY_VAR пользователем, так же, как предложено здесь . Поскольку существует ряд зависимостей, вместо принудительного ввода нового значения для одной зависимой переменной, я ввел новую переменную MY_VAR_CHANGED. Чтобы определить зависимую переменную, можно сделать что-то вроде этого:

if( MY_VAR_CHANGED )
  set( DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH "" FORCE )
else()
  set( DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH "" )
endif()

Я использую этот код во многих разных местах, поэтому мне было интересно, есть ли элегантный способ условно обернуть FORCE, например, используя что-то вроде оператора ? : в c ++.

1 Ответ

0 голосов
/ 29 июня 2018

В CMake отсутствует множество функций, связанных с «встроенными» вычислениями. Вместо этого вы всегда можете создать макрос / функцию, инкапсулирующую поведение, которое вам нужно:

# Straightforward macro, which removes code duplicates
macro(set_force_conditional cond_var)
    if(${cond_var})
        set(${ARGV} "" FORCE)
    else()
        set(${ARGV} "")
    endif()
endmacro()

Использование:

set_force_conditional(MY_VAR_CHANGED DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH)

(разыменование нормальной переменной теряет элементы "", поэтому макрос передает пустую строку документации в команду set(CACHE) вручную).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...