Я провел много исследований в Интернете, но не смог решить свою проблему.
Для нашей среды сборки Windows нам нужен клиент Oracle.Нет переменной среды, содержащей путь к ORACLE_HOME.Но в реестре есть этот путь, как описано здесь .
Насколько я выяснил, CMake также может читать реестр.Об этом уже спрашивали здесь, на Stackoverflow.Но в моей среде это не работает, и у меня заканчиваются идеи.
Сначала я попробовал команду set .Но это больше не работает.
set(ora_set "[HKLM\\SOFTWARE\\ORACLE\\KEY_OraClient12Home1\\ORACLE_HOME]")
message( "ora_set (set) = ${ora_set}" )
Вывод:
ora_set (set) = [HKLM\SOFTWARE\ORACLE\KEY_OraClient12Home1\ORACLE_HOME]
Я ожидал получить <Path to ORACLE_HOME>
, но у меня <[HKLM\\SOFTWARE\\ORACLE\\KEY_OraClient12Home1\\ORACLE_HOME]>
.
Затем я попытался get_filename_component , как описано здесь в StackOverflow:
get_filename_component(ora_gfc "[HKLM\\SOFTWARE\\ORACLE\\KEY_OraClient12Home1\\ORACLE_HOME]" ABSOLUTE CACHE)
message( "ora_gfc (get_filename_component) = ${ora_gfc}" )
Вывод:
ora_gfc (get_filename_component) = <Path to ORACLE_HOME>[HKLM/SOFTWARE/ORACLE/KEY_OraClient12Home1/ORACLE_HOME]
Я ожидал получить <Path to ORACLE_HOME>
, но у меня есть <Path to ORACLE_HOME[HKLM\\SOFTWARE\\ORACLE\\KEY_OraClient12Home1\\ORACLE_HOME]>
.CMake всегда добавляет путь к реестру к значению из реестра.Я не смог найти способ предотвратить это.
В качестве третьей возможности я попытался execute_process , потому что с помощью запроса reg вы также можете прочитать реестр из пакета, как описано здесь .
execute_process (
COMMAND FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE\\KEY_OraClient12Home1" /v ORACLE_HOME`) DO ECHO %%A
OUTPUT_VARIABLE ora_exp
)
message( "ora_exp (execute_process) = ${ora_exp}" )
Вывод:
ora_exp (execute_process) =
Я ожидал получить <Path to ORACLE_HOME>
, но у меня есть пустая переменная.Похоже, что CMake тоже не нравится, хотя пакетная команда работает как положено в отдельном пакетном файле.
Теперь я заблудился: как правильно прочитать значение реестра с помощью CMake.У кого-нибудь есть подсказка?
Моя среда
- Windows 10 64-битная
- CMake 3.12.4
- Oracle Client 12.2.0.1