2017-08-23 29 views
1

我正在使用CMake生成我的Visual Studio項目文件。我想看看我是否能「帽子戲法」的Visual Studio爲還編制了使用bash在Ubuntu Linux在Windows從Windows 10,所以我創建了下面的CMakeLists.txt一個小型虛擬項目:CMake add_custom_target;在Visual Studio中找不到32位命令

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. 

但我可以從我的命令提示符運行這個確切的命令,它工作正常:

C:\Windows\System32\bash.exe -c "make -C build" 

爲什麼不能Visual Studio中/ CMake的找到bash可執行文件?

回答

0

這可能是我遇到的最愚蠢的問題...本博客文章是什麼導致了我答案:http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm

的問題是與Windows如何處理32位和64位程序:它保留System32中的64位程序和SysWOW64中的32位程序。只有32位程序可以看到SysWOW64,只有64位程序可以看到System32。如果32位程序需要System32中的程序,則必須使用名爲sysnative的僞文件夾。

原來的Visual Studio正在啓動我的CMake在32位shell命令,這意味着它在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路徑)。

相關問題