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

标签 c++ visual-studio cmake

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

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

  • Microsoft C++ 单元测试框架(示例库位置:c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\VS\UnitTest\lib\x64\Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib)
  • 用于查找内存泄漏的 crtdbg(示例 header 位置: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
    )
    

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

    最佳答案

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

    关于c++ - cmake:查找/添加 Visual Studio 或 windows sdk 库和头文件的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862199/

    相关文章:

    c++ - printf/snprintf 格式字符 %N 有什么作用? (不是 %n)

    c++ - 如何通过 linux 套接字将 UTF-8 文本放入 std::string

    c++ - .tlb 文件未在 vcxproj .rc 文件中生成

    c# - 在 Visual Studio 2010 中将一个 xml 文件注入(inject)另一个(合并两个 xml 文件)

    c++ - cv-qualified 是什么意思?

    c++ - 如何增加 gcc 可执行堆栈大小?

    c# - visual studio 在控制台应用程序而不是 Web 项目中打开 Web 浏览器 + 调试器

    c++ - 错误 LNK1104 : cannot open file 'Debug\MyProjectLib.lib'

    vim - 检测 Vim 生成的可执行文件

    cmake - 使用 CMake 在 Windows 10 上构建 zeromq