cmake если еще с опцией

Я с проблемой использовать option все вместе if-else в cmake.

project(test)

option(TESTE "isso é um teste" OFF)

if(TESTE)
  message("true")
else()
  message("false")
endif()

add_executable(test main.cpp)

Это всегда отображать true даже если я отключу опцию, что я делаю не так?

2 ответа

Решение

Это потому, что значение параметра хранится в кэше (CMakeCache.txt).

Если вы измените значение по умолчанию в CMakeLists, но фактическое значение уже сохранено в кэше, оно просто загрузит значение из кэша.

Поэтому, чтобы проверить логику в ваших CMakeLists, удаляйте кэш каждый раз перед повторным запуском CMake.

У меня была похожая проблема, и я смог решить ее, используя немного другой подход.

Мне нужно было добавить некоторые флаги компиляции в случае, если cmake был вызван с опцией из командной строки (т.е. cmake -DUSE_MY_LIB=ON). Если опция отсутствовала в вызове cmake, я хотел бы вернуться к случаю по умолчанию, который отключал эту опцию.

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

cmake -DUSE_MY_LIB=ON .. #invokes cmake and puts USE_MY_LIB=ON in CMake's cache.
cmake ..                 #invokes cmake with the cached option ON, instead of OFF

Решением, которое я нашел, было удаление опции из CMakeLists.txt после ее использования:

option(USE_MY_LIB "Use MY_LIB instead of THEIR_LIB" OFF) #OFF by default
if(USE_MY_LIB)
    #add some compilation flags
else()
    #add some other compilation flags
endif(USE_MY_LIB)
unset(USE_MY_LIB CACHE) # <---- this is the important!!

Примечание:unset опция доступна с версии cmake v3.0.2

Попробуй, у меня это работает

unset(USE_MY_LIB CACHE CACHE)
Другие вопросы по тегам