如何在cmake中获取路径上的所有目录名称?
How to get all directory name on a path in cmake?
我想写一个cmake脚本来找到directx 12 sdk的目录。此目录位于 $ENV{ProgramFiles}/Windows Kits/10/Include/
。然而,在这个路径上,它有许多不同版本的 SDK 存储在不同的目录中。比如10.0.10150、10.0.10240、10.0.10586等等。
不知道多少个版本的SDK。所以我想获取这条路径上的所有目录。但是我该怎么办?
目录如下:
- $ENV{ProgramFiles}/Windows Kits/10/Include/
- 10.0.10150
- 10.0.10240
- 10.0.10586
谢谢。
将我的评论变成答案
根据 "Where is the DirectX SDK (2015 Edition)?",它现在是 Windows 10 SDK 的一部分(您添加的路径表明您已经安装了它)。
如果我们只讨论 SDK 中的 headers,则您无需提供任何信息。只需包含它们,Visual Studio 就会找到合适的 SDK headers(匹配您项目的设置)。
为了回答您的问题,我看到了以下可能性(使用我的 VS2015 社区版测试):
使用CMake变量CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
:
file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _progFilePath)
message("${_progFilePath}/Windows Kits/10/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
我机器上的输出
C:/Program Files/Windows Kits/10/Include/10.0.14393.0
让 CMake 完成查找 DirectX headers 和 find_file()
:
的工作
find_file(_directXHeader "d3d9.h")
get_filename_component(_directXPath "${_directXHeader}" DIRECTORY)
message("${_directXPath}")
我机器上的输出
C:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/shared
直接使用Visual Studio这样的宏
add_compile_options("/I%(WindowsSDK_IncludePath)")
我想写一个cmake脚本来找到directx 12 sdk的目录。此目录位于 $ENV{ProgramFiles}/Windows Kits/10/Include/
。然而,在这个路径上,它有许多不同版本的 SDK 存储在不同的目录中。比如10.0.10150、10.0.10240、10.0.10586等等。
不知道多少个版本的SDK。所以我想获取这条路径上的所有目录。但是我该怎么办? 目录如下:
- $ENV{ProgramFiles}/Windows Kits/10/Include/
- 10.0.10150
- 10.0.10240
- 10.0.10586
谢谢。
将我的评论变成答案
根据 "Where is the DirectX SDK (2015 Edition)?",它现在是 Windows 10 SDK 的一部分(您添加的路径表明您已经安装了它)。
如果我们只讨论 SDK 中的 headers,则您无需提供任何信息。只需包含它们,Visual Studio 就会找到合适的 SDK headers(匹配您项目的设置)。
为了回答您的问题,我看到了以下可能性(使用我的 VS2015 社区版测试):
使用CMake变量
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
:file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _progFilePath) message("${_progFilePath}/Windows Kits/10/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
我机器上的输出
C:/Program Files/Windows Kits/10/Include/10.0.14393.0
让 CMake 完成查找 DirectX headers 和
的工作find_file()
:find_file(_directXHeader "d3d9.h") get_filename_component(_directXPath "${_directXHeader}" DIRECTORY) message("${_directXPath}")
我机器上的输出
C:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/shared
直接使用Visual Studio这样的宏
add_compile_options("/I%(WindowsSDK_IncludePath)")