Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Инструменты разработчика _ CMake. Присвоение значений логическим переменным.

Автор: kuzulis 26.10.2010, 13:51

Всем доброго времени.

Имею CMakeLists.txt

set( APP_TARGET test )
project( ${APP_TARGET} )
cmake_minimum_required( VERSION 2.6.0 )

option( OPTION1 "Option1" OFF )
option( OPTION2 "Option2" OFF )
option( OPTION3 "Option3" OFF )

set( LOGICAL_RESULT OPTION1 OR OPTION2 OR OPTION3 )

if( LOGICAL_RESULT )
    message( STATUS "Logical OR True" )
else( LOGICAL_RESULT )  
    message( STATUS "Logical OR False" )
endif( LOGICAL_RESULT )

set( APP_SRCS main.cpp )
add_executable( ${APP_TARGET} ${APP_SRCS} )
target_link_libraries( ${APP_TARGET} )


Мне в нём нужно создать переменную LOGICAL_RESULT которая имела бы значение логического выражения OPTION1 + OPTION2 + OPTION3 и которую я бы подставил в конструкцию if/else/endif.
В принципе, я мог бы в if/else/endif подставить OPTION1 OR OPTION2 OR OPTION3 и всё бы работало.. НО! Если переменных OPTION1 ... OPTIONN десять/сто штук, то if/else/endif невозможно будет найти видуально в этом мусоре.

Подскажите, как лучше поступить ?

Автор: Sokoloff 26.10.2010, 15:01

У тебя всегда срабатывает if( LOGICAL_RESULT ) потому что переменная LOGICAL_RESULT содержит список "OPTION1 OR OPTION2 OR OPTION3", т.е. не пустая. Проверить можно добавив message(STATUS "LOGICAL_RESULT ${LOGICAL_RESULT}")

Можно сделать так:

option( OPTION1 "Option1" OFF )
option( OPTION2 "Option2" OFF )
option( OPTION3 "Option3" OFF )

if (OPTION1 OR OPTION2 OR OPTION3)
    set( LOGICAL_RESULT TRUE)
endif (OPTION1 OR OPTION2 OR OPTION3)

...

может и не очень красиво но работает.

Автор: kuzulis 26.10.2010, 15:40

Ну да, в принципе это тоже самое что и "переливание из пустого в порожнее" (с) ...
Хотелось бы чего-то другого, но наверное это невозможно.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)