作为对已接受答案的替代方案,您可能希望考虑MSYS本身将在MSYS父进程和本地子进程之间的任何边界处执行转换; 因此,在MSYS shell控制台中:
cmd //c echo /c/my/path/to/a/folder
将显示适当转换的路径 c:/my/path/to/a/folder
。此外,这种技术提供了可能的优势,它将发出完全转换为本地形式的路径,例如:
cmd //c echo /home/my/path/to/a/folder
为了得到其本地等效路径C:/MinGW/msys/1.0/home/my/path/to/a/folder
,(假设您的MSYS安装在推荐的默认位置C:/MinGW/msys/1.0
),请参考以下建议。
需要注意的是,在没有像msys.bat一样进行适当初始化的情况下运行MSYS shell可能无法工作(特别是在64位Windows上运行时)。尽管如此,您仍然可以从本地进程(例如在CMake中)中运行等效命令:
C:/MinGW/msys/1.0/bin/sh -c 'cmd //c echo /home/my/path/to/a/folder'
请注意,如果您从运行在MSYS控制台中的本地进程中调用此命令,则初始化将已经正确执行为控制台自己的shell进程,并且应该通过本地进程传播。如果您尝试直接从cmd.exe进程在本地Windows控制台(或其他本地容器)中调用MSYS进程,则可能会出现问题。
另请注意,如果路径名包含空格(这不是一个好主意),则您可能需要将其括在双引号内。
cmd //c echo "/home/my/path with spaces"
在这种情况下,一些实验表明双引号仍然保留在cmd输出中。我不完全确定这是否必要;在您自己特定的用例中,请自行决定。
mypath
,输出result
是什么?请使用message
命令进行调试,例如message(STATUS "result = ${result}"
)。为什么你的初始路径是 MSYS 格式?为什么需要绝对路径?对于项目内的任何内容,您都可以使用相对路径,cmake 会负责将其转换为完整路径。您能否还打印出变量CMAKE_SOURCE_DIR
的内容?这将有助于了解 cmake 在您的情况下使用的“路径语法”类型。 - Antonio