Apologies up front, I’m still learning CMake and using Visual Studio probably isn’t helping learn the basics (using it as its so good at debugging code).
I have a CMake project in Visual Studio and I’m linking to spdlog (performance logger). I checked out spdlog and used CMake-GUI to generate the make files. Then opened the VS solution files to build/install. Worth noting that even though CMake-GUI had CMAKE_BUILD_TYPE set to Release, that when I opened the generated files in VS, it was defaulting to debug. So I built as Debug (which also installed a cmake folder of cmake files and a pkgconfig folder), toggled it to Release and rebuilt (that built only the release lib file, but didn’t install the cmake/pkgconfig folder oddly and it built it into the src folder of spdlog not the installation folder).
I dropped the release build into the installation folder created by the debug build.
In my project CMakeLists.txt, I have
set(spdlog_DIR "C:/Work/Libs/spdlog/lib/cmake/spdlog") find_package(spdlog REQUIRED) target_link_libraries(my-project PRIVATE spdlog::spdlog)
I also tried this as a test
target_link_libraries(my-project PRIVATE optimized spdlog::spdlog)
but that seemed to do nothing.
I can build my project and use spdlog fine if my project (via VS UI) is in x64-Debug, but when I switch to x64-Release, I get linker errors and I can see it’s trying to link to spdlogd.lib (debug) not the spdlog.lib (release). Linker errors are
error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in my-project.cpp.obj
I would have expected VS to pass the appropriate flags to CMake (or Ninja it seems - this bit confuses me) to link to the spdlog build type matching my project build type.
My spdlog installation folder is as so (as mentioned, I manually added the spdlog.lib into it, because the Release build only built the lib file - and in the src directory not the installation directory).
│ spdlog.lib │ spdlogd.lib │ ├───cmake │ └───spdlog │ spdlogConfig.cmake │ spdlogConfigTargets-debug.cmake │ spdlogConfigTargets.cmake │ spdlogConfigVersion.cmake │ └───pkgconfig spdlog.pc
I could ask in an spdlog forum, but thought I’d try here first in case I’m doing something daft.
Any assistance greatly appreciated.