Это распространенное заблуждение о переменных «set» и CMake.
Строка:
set(LIBRARY_INCLUDE_DIR ${OTHER_LIB_ROOT_DIR}/database/include)
устанавливает локальное значение переопределения для LIBRARY_INCLUDE_DIR, которое вступает в силу для оставшейся частиобработка файла CMakeLists, но это не влияет на переменную кэша с тем же именем.Следовательно, он не виден в программах редактирования кэша cmake-gui или ccmake.
Если вы хотите сделать его видимым, вам придется принудительно ввести его значение в переменную кэшато же имя, возможно, вот так:
set(LIBRARY_INCLUDE_DIR ${OTHER_LIB_ROOT_DIR}/database/include)
set(LIBRARY_INCLUDE_DIR ${LIBRARY_INCLUDE_DIR} CACHE FILEPATH "" FORCE)
Однако это, как правило, неодобрительно, потому что тогда, когда конечный пользователь изменяет значение в программе cmake-gui, ваш код перезапишет выбор пользователя с помощью FORCE.-d значение.Итак ... Я бы порекомендовал просто использовать строку, которую вы использовали: противостоять FORCE.
Чтобы увидеть, что это действительно вступает в силу, просто добавьте этот код в конце CMakeLists.txt:
message(STATUS "LIBRARY_INCLUDE_DIR='${LIBRARY_INCLUDE_DIR}'")
Итак ... учитывая, что ваш код правильный, должно быть что-то еще, что заставляет вас думать, что что-то не так.Мне интересно, что это может быть ... возможно, ваш следующий вопрос переполнения стека.