我正在使用CMake生成我的Visual Studio项目文件。我想看看我是否可以“诱使”Visual Studio在Windows10中使用Bash on Ubuntu为Linux编译,所以我用以下CMakeLists.txt创建了一个小的虚拟项目:
cmake_minimum_required (VERSION 3.5)
project(linux)
set(BASH_EXE C:/Windows/System32/bash.exe)
add_custom_target(Linux ALL
COMMAND ${BASH_EXE} -c "make -C ${CMAKE_SOURCE_DIR}/build"
)令我惊讶的是,这实际上完成了工作,并创建了一个名为Linux的项目,该项目运行上述命令。不幸的是,该命令崩溃了,错误如下:
'C:\Windows\System32\bash.exe' is not recognized as an internal or external command, operable program or batch file.但是我可以从我的cmd提示符运行这个命令,它工作得很好:
C:\Windows\System32\bash.exe -c "make -C build"为什么Visual Studio/CMake找不到bash可执行文件?
发布于 2017-08-25 00:10:45
这可能是我遇到过的最愚蠢的问题了。这篇博文让我找到了答案:http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm
问题出在Windows处理32位与64位程序的方式上:它将64位程序保存在System32中,将32位程序保存在SysWOW64中。只有32位程序可以看到SysWOW64,只有64位程序可以看到System32。如果32位程序需要System32中的程序,它必须使用名为sysnative的伪文件夹。
原来Visual Studio是在32位shell中启动我的CMake命令的,这意味着它无法在C:/Windows/System32/中找到程序
所以我不得不把我的CMakeLists.txt改成这样:
cmake_minimum_required (VERSION 3.5)
project(linux)
set(BASH_EXE C:/Windows/sysnative/bash.exe)
add_custom_target(Linux ALL
COMMAND ${BASH_EXE} -c "make -C ../../build"
)不幸的是,由于CMAKE_SOURCE_DIR变量的性质,我不得不将其更改为使用相对路径而不是绝对路径(CMAKE_SOURCE_DIR扩展到Windows路径,而不是Linux路径)。
https://stackoverflow.com/questions/45845930
复制相似问题