0

I tried to run executable file from Sublime Text 3 after it was successfully built with C++11 Build System, but got the error:

[WinError 2] The system cannot find the file specified[cmd: ['bash', '-c', "g++ -std=c++0x 'C:\Users\FTP-RSky\Desktop\RSky\rect\test_g++11.cpp' -o 'C:\Users\FTP-RSky\Desktop\RSky\rect/test_g++11' && xterm -e bash -c 'C:\Users\FTP-RSky\Desktop\RSky\rect/test_g++11; read'"]] [dir: C:\Users\FTP-RSky\Desktop\RSky\rect] [path: C:\Program Files\Processing-3.2.1;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\CodeBlocks\MinGW\bin;C:\Program Files\Java\jdk1.8.0_73\bin\lib;C:\Program Files\Java\jdk1.8.0_73\bin] [Finished]

So I have three build system in Sublime Text 3:

1. C++ Build and Run perfectly fine!!!

2. C++11 Build but not Run. my C++11.sublime-build file:

  {

 "cmd": ["g++", "-std=c++11", "${file}", "-o", "${file_path}/${file_base_name}"],

 "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

 "working_dir": "${file_path}",

 "selector": "source.c, source.c++",

 "variants":

 [
   {
     "name": "Run",
     "cmd":["bash", "-c", "g++ '${file}' -std=c++11 -stdlib=libc++ -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
   }

 ]
}

3. C++14 Doesn't Build & Run. [WinError 2] The system cannot find the file specified[cmd: my C++14.sublime-build file:

   {

 "cmd":["bash", "-c", "g++ -std=c++14 -Wall '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"],

 "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",

 "working_dir": "${file_path}",

 "selector": "source.c, source.c++",

 "variants":

 [
   {
     "name": "Run",

     "cmd":["bash", "-c", "g++ -std=c++14 '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
   }
 ]
}

There is a way to build and run modern C++11 & 14 versions inside Sublime Text 3 as a regular C++ output without issues? Or do I miss something?

Alan
  • 43
  • 1
  • 10
  • Presuming the build that works is the one that's built into Sublime is the one that's working, the problem is probably that `bash` is not in your path (that's what the error is telling you). The built in build for C++ just invokes `g++` directly. You should probably just do it that way, since you know it already works. – OdatNurd Oct 24 '16 at 16:04

1 Answers1

0

When using Bash on Ubuntu on Windows, you will have to use POSIX paths rather than Windows paths. As an example, the Windows path c:\Users\me\Desktop\My Project\source.cpp translates to the POSIX path /mnt/c/users/me/Desktop/My Project/source.cpp.

Unless you want to hardcode those paths in your .sublime-build file, you could have to create a script (e.g. Batch) that handles this and call that in your build file. This example script is a good starting point.

Community
  • 1
  • 1
idleberg
  • 12,634
  • 7
  • 43
  • 70
  • Finally, works perfectly fine: { "shell_cmd": "g++ -std=c++14 \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c, source.c++", "variants": [ { "name": "Run", "shell_cmd": "g++ -std=c++14 \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"" } ] } – Alan Oct 26 '16 at 22:29
  • Ah, it wasn't clear from your question that you're using a native Win32 `g++`, that's why I thought of [Bash on Ubuntu on Windows](https://msdn.microsoft.com/en-us/commandline/wsl/about) – idleberg Oct 27 '16 at 06:37