Reading registry values with cmake

cmake, registry

Solution

According to the wiki, you can't use `SET` to view the value of a registry key. The registry value is only read when you do some cache operation on it. For example, the following should output the path you want:

GET_FILENAME_COMPONENT(MYPATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\7-Zip;Path]"
                       ABSOLUTE CACHE)
MESSAGE("MYPATH = ${MYPATH}")

Problem

On a Windows 7 machine I cannot read any registry values that contain a semicolon. For example if you have 7-zip, running the following ``` SET(MYPATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\7-Zip;Path]) MESSAGE("MYPATH = ${MYPATH}") ``` results in ``` MYPATH = [HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip;Path] ``` instead of the actual path as per the following thread. I think cmake support for registry paths that contain ";" are broken on Windows 7. Can somebody confirm this? Is there any work-around?

Original source