首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake add_custom_target;在Visual Studio中找不到32位命令

问CMake add_custom_target;在Visual Studio中找不到32位命令
EN

Stack Overflow用户
提问于 2017-08-24 01:26:18
回答 1查看 270关注 0票数 1

我正在使用CMake生成我的Visual Studio项目文件。我想看看我是否可以“诱使”Visual Studio在Windows10中使用Bash on Ubuntu为Linux编译,所以我用以下CMakeLists.txt创建了一个小的虚拟项目:

代码语言:javascript
复制
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的项目,该项目运行上述命令。不幸的是,该命令崩溃了,错误如下:

代码语言:javascript
复制
'C:\Windows\System32\bash.exe' is not recognized as an internal or external command, operable program or batch file.

但是我可以从我的cmd提示符运行这个命令,它工作得很好:

代码语言:javascript
复制
C:\Windows\System32\bash.exe -c "make -C build"

为什么Visual Studio/CMake找不到bash可执行文件?

EN

回答 1

Stack Overflow用户

发布于 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改成这样:

代码语言:javascript
复制
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路径)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45845930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档