Почему параметр -DVCPKG_TOOLCHAIN_FILE позволяет мне находить пакеты, а set(VCPKG_TOOLCHAIN_FILE …) нет?

#cmake #vcpkg

#cmake #vcpkg

Вопрос:

Почему, когда я устанавливаю путь к цепочке инструментов vcpkg из команды cmake configure

 cmake -DVCPKG_TOOLCHAIN_FILE=D:/vcpkg/script/buildsystems/vcpkg.cmake ..
  

Я могу использовать find_package , например:

 find_package(LibXml2 REQUIRED)
  

тогда как, если я хочу установить разумное значение по умолчанию для файла цепочки инструментов vcpkg, используя кэшированную переменную cmake

 set(VCPKG_TOOLCHAIN_FILE D:/vcpkg/script/buildsystems/vcpkg.cmake CACHE FILEPATH "vcpkg toolchain path")
  

затем та же find_package команда завершается с ошибкой:

 CMake Error at C:/Program Files/CMake/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find LibXml2 (missing: LIBXML2_INCLUDE_DIR)
  

чего мне здесь не хватает?

Комментарии:

1.Вы устанавливаете VCPKG_TOOLCHAIN_FILE перед project() вызовом, не так ли?

2. Нет, это была одна из моих проблем. Другой был в том, что мне нужно установить CMAKE_TOOLCHAIN_FILE == VCPKG_TOOLCHAIN_FILE перед вызовом project()