cmake:查找/添加 Visual Studio 或 windows sdk 库和头文件的正确方法?

Kev*_*vin 5 c++ cmake visual-studio

我正在使用 cmake 生成一个 Visual Studio 项目。

假设我需要使用以下 Microsoft 特定的库和标头:

  • 微软C ++单元测试框架(例如库位置: c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\VS\UnitTest\lib\x64\Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib
  • crtdbg用于发现内存泄漏(例如报头的位置: c:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\crtdbg.h

我不想将这些路径硬编码到我的 CMakeLists.txt 中,也不想强制开发人员在构建过程中传入路径。

我希望能够做这样的事情:

# 1.  get include paths somehow
# 2.  get lib paths somehow

include_directories(
    ${MSVS_UnitTest_INCLUDE_DIR}
    ${Windows_SDK_INCLUDE_DIR}/ucrt
)

link_directories(
    ${MSVS_UnitTest_LIBRARIES_DIR}/x64
    ${Windows_SDK_LIBRARIES_DIR}/ucrt/x64
)

add_library(MyTest mytest.cpp)

target_link_libraries(MyTest
    libucrt
    Microsoft.VisualStudio.TestTools.CppUnitTestFramework
)
Run Code Online (Sandbox Code Playgroud)

做#1 和#2 的正确方法是什么?

Der*_*per 3

至少对于#1(包括sdk的路径)我找到了一个解决方案。如果您使用Visual Studio 生成器,则 cmake 变量CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION将填充包含文件夹的路径。另一种方法是使用环境变量 $ENV{WindowsSdkDir} 和 $ENV{WindowsSDKVersion},源 cmake 也很可能从中获取此信息。