cmake обновляет кэшированную переменную - PullRequest
0 голосов
/ 31 октября 2018

Я использую переменную cmake CMAKE_BUILD_CONFIG, чтобы указать, какие модули репо компилировать, как в командной строке ...

cmake -DCMAKE_BUILD_CONFIG=A ..

Этот CMAKE_BUILD_CONFIG затем используется в файле CMakeLists.txt следующим образом ...

if(CMAKE_BUILD_CONFIG STREQUAL A)
message(STATUS "Compiling only config A modules")
set(MODULES
    foo1        
    foo2
)
elseif(CMAKE_BUILD_CONFIG STREQUAL B)
message(STATUS "Compiling only config B modules")
set(MODULES
    foo3
)
endif()

Так что теперь, когда я впервые запускаю cmake -DCMAKE_BUILD_CONFIG=A .. (или B), он работает нормально. Однако после этого, похоже, CMAKE_BUILD_CONFIG сохраняется в CMakeCache.txt и не обновляется, если я звоню cmake -DCMAKE_BUILD_CONFIG=B ...

При поиске решения я нашел вызов unset(CMAKE_BUILD_CONFIG CACHE) и добавил его в конец CMakeLists.txt, но это не сработало.

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Однако после этого, похоже, CMAKE_BUILD_CONFIG сохранен в CMakeCache.txt и не обновляется, если я вызываю cmake -DCMAKE_BUILD_CONFIG = B ...

Это должно сработать (протестировано с CMake 2.8.12 и выше).

Цитирование CMake документации (выделено мной):

-D <var>:<type>=<value>, -D <var>=<value>

Создать или обновить запись кэша cmake.

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

cmake_minimum_required(VERSION 3.0)
project(cmake_tester CXX)

message("Module Config is " ${CMAKE_BUILD_CONFIG})

Затем запуск cmake с другими аргументами для -D изменяет значение кэша:

$ cmake -DCMAKE_BUILD_CONFIG=Foo ..
Module Config is Foo
-- Configuring done
$ cmake ..
Module Config is Foo
-- Configuring done
$ cmake -DCMAKE_BUILD_CONFIG=Bar ..
Module Config is Bar
-- Configuring done

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

0 голосов
/ 31 октября 2018

Это не лучшее решение, но пока нет лучших решений:

Вы можете удалить CMakeCache.txt, чтобы предотвратить эту проблему. Я предлагаю переместить CMakeCache.txt из текущей папки, запустить «cmake» и «make» и проверить, работает ли он.

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