如何使用 CMake 获取系统的路径分隔符

ein*_*ica 5 cmake buildconfiguration path-separator

我正在使用 CMake 配置一些项目。我需要将路径分隔符(例如/\)放入 CMake 变量中以执行某些操作,而不必介意具体是什么。我怎样才能做到这一点?

Flo*_*ian 4

系统的路径分隔符没有可以直接使用的CMake变量。

但正如 @vre 评论的那样,使用file(TO_NATIVE_PATH)你可以执行的命令:

file(TO_NATIVE_PATH "/" _separator)
message("The systems's path separator is '${_separator}'")
Run Code Online (Sandbox Code Playgroud)

如果您有完整路径,则$<SHELL_PATH:...>生成器表达式 (CMake 版本 >= 3.4)非常有用:

...转换为 shell 路径样式的内容。例如,在 Windows shell 中,斜杠将转换为反斜杠,在 MSYS shell 中,驱动器号将转换为 posix 路径。必须...是绝对路径。

  • @einpoklum 我不确定,所以我在 Windows 和 Ununtu 上尝试过。两者都工作正常。如果我查看有问题的 CMake 源代码,例如 [`SystemTools::ConvertToWindowsOutputPath()`](https://gitlab.kitware.com/cmake/cmake/blob/master/Source/kwsys/SystemTools.cxx#L2000 ),它主要转换斜杠(与 [`$&lt;SHELL_PATH:...&gt;` 生成器表达式](https://github.com/Kitware/CMake/blob/master/Source/cmGeneratorExpressionNode.cxx#L1780) 不同) 。 (2认同)