I posted on the CMake forum and was suggested the following, which worked. Notice the CONFIG parameter that I was not previously using (nor was required for pugixml or spdlog). I am updating the thread incase anyone needs this here in the future.
set(GTest_ROOT "c:/cpp/googletest")
find_package(GTest CONFIG REQUIRED)
And all is well with the world. Here is the explanation, but I will read more into the CONFIG parameter.
Link here: CMake Forum Post
CMake ships with a FindGTest module. It seems that the logic in this is not set up to handle a build without release artifacts. Using CONFIG makes it use the GTest-provided GTestConfig.cmake files which describes exactly what is available without erroring about the lack of release artifacts.
Worth noting that when generating googletest from CMake GUI I had to enabled
gtest_force_shared_crt
as I was getting a linker error. I found this here:
https://github.com/google/googletest/tree/master/googletest
Visual Studio Dynamic vs Static Runtimes
By default, new Visual Studio projects link the C runtimes dynamically but GoogleTest links them statically. This will generate an error that looks something like the following: gtest.lib(gtest-all.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in main.obj
GoogleTest already has a CMake option for this: gtest_force_shared_crt
Enabling this option will make gtest link the runtimes dynamically too, and match the project in which it is included.
Hope this helps someone.