使用 sublime-build 时无法 运行 C++ 程序,当从终端 运行ning 时工作正常
Cannot run C++ program when using sublime-build, works fine when running from terminal
我正在尝试 运行 Linux/Ubuntu 14.04
上的 C++ 程序
我正在使用 SFML 库,tutorial 建议在 运行ning 之前包括这一行,如果 SFML 安装在非标准路径(它是):
$ export LD_LIBRARY_PATH=<sfml-install-path>/lib
我可以使用以下输入从终端运行程序:
$ export LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib && ./YorickTheSavant
但是,当尝试使用 sublime-build 文件在 Sublime Text 2 中启动程序时,出现以下错误:
[Errno 2] No such file or directory
[cmd: [u'export', u'LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib', u'&&', u'./YorickTheSavant']]
[dir: /home/dan/yorickthesavant]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/dan/.rvm/bin]
[Finished]
这是我的 sublime-build 文件供参考:
{
"cmd": ["g++", "-m32", "-c", "-std=c++11",
"src/buff.cpp",
"src/card.cpp",
"src/clickableObject.cpp",
"src/creature.cpp",
"src/dataHandler.cpp",
"src/dungeonRun.cpp",
"src/enemy.cpp",
"src/gameQueue.cpp",
"src/gameSystem.cpp",
"src/graphics.cpp",
"src/hoverText.cpp",
"src/infoText.cpp",
"src/main.cpp",
"src/player.cpp",
"src/queueBlock.cpp",
"src/queueEffect.cpp",
"src/roundedCornerRect.cpp",
"src/save.cpp",
"src/ttText.cpp",
"-I", "include"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "/home/dan/yorickthesavant/",
"selector": "source.c, source.c++",
"variants":
[
{
"name": "Link",
"cmd": ["g++", "-m32",
"buff.o",
"card.o",
"clickableObject.o",
"creature.o",
"dataHandler.o",
"dungeonRun.o",
"enemy.o",
"gameQueue.o",
"gameSystem.o",
"graphics.o",
"hoverText.o",
"infoText.o",
"main.o",
"player.o",
"queueBlock.o",
"queueEffect.o",
"roundedCornerRect.o",
"save.o",
"ttText.o",
"-o", "YorickTheSavant",
"-L", "/home/dan/SFML-2.3.1/lib",
"-lsfml-graphics",
"-lsfml-window",
"-lsfml-system"]
},
{
"name": "Run",
"cmd": ["export", "LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib", "&&", "./YorickTheSavant"]
}
]
}
"Run" 变体是我正在使用的变体。当游戏在终端外和 Sublime Text 2 中启动时,我该如何做到这一行自动包含在内?
.sublime-build 文件中的 cmd
键将程序指定为 运行。
第一个值应该是程序,其余的是参数,
所以当它找不到名为 export
的程序时它会失败 - 因为它是 shell 内置的。
为了 运行 shell 中的整个命令(就像手动执行时一样),您可以在 Run
变体中指定 "shell" : true
(或使用shell_cmd
而不是 cmd
):
{
"name": "Run",
"cmd": ["export", "LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib", "&&", "./YorickTheSavant"],
"shell" : true
}
这应该比直接调用 /bin/sh -c <stuff>
效果更好,而且我认为您不再需要将 cmd 数组中的条目压缩成一个字符串。
或者,您也可以尝试使用 env
键(也可以找到 here)在 运行 安装您的可执行文件之前指定 LD_LIBRARY_PATH
环境变量:
{
"name": "Run",
"cmd": ["./YorickTheSavant"],
"env" : { "LD_LIBRARY_PATH" : "/home/dan/SFML-2.3.1/lib" }
}
我正在尝试 运行 Linux/Ubuntu 14.04
上的 C++ 程序我正在使用 SFML 库,tutorial 建议在 运行ning 之前包括这一行,如果 SFML 安装在非标准路径(它是):
$ export LD_LIBRARY_PATH=<sfml-install-path>/lib
我可以使用以下输入从终端运行程序:
$ export LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib && ./YorickTheSavant
但是,当尝试使用 sublime-build 文件在 Sublime Text 2 中启动程序时,出现以下错误:
[Errno 2] No such file or directory
[cmd: [u'export', u'LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib', u'&&', u'./YorickTheSavant']]
[dir: /home/dan/yorickthesavant]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/dan/.rvm/bin]
[Finished]
这是我的 sublime-build 文件供参考:
{
"cmd": ["g++", "-m32", "-c", "-std=c++11",
"src/buff.cpp",
"src/card.cpp",
"src/clickableObject.cpp",
"src/creature.cpp",
"src/dataHandler.cpp",
"src/dungeonRun.cpp",
"src/enemy.cpp",
"src/gameQueue.cpp",
"src/gameSystem.cpp",
"src/graphics.cpp",
"src/hoverText.cpp",
"src/infoText.cpp",
"src/main.cpp",
"src/player.cpp",
"src/queueBlock.cpp",
"src/queueEffect.cpp",
"src/roundedCornerRect.cpp",
"src/save.cpp",
"src/ttText.cpp",
"-I", "include"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "/home/dan/yorickthesavant/",
"selector": "source.c, source.c++",
"variants":
[
{
"name": "Link",
"cmd": ["g++", "-m32",
"buff.o",
"card.o",
"clickableObject.o",
"creature.o",
"dataHandler.o",
"dungeonRun.o",
"enemy.o",
"gameQueue.o",
"gameSystem.o",
"graphics.o",
"hoverText.o",
"infoText.o",
"main.o",
"player.o",
"queueBlock.o",
"queueEffect.o",
"roundedCornerRect.o",
"save.o",
"ttText.o",
"-o", "YorickTheSavant",
"-L", "/home/dan/SFML-2.3.1/lib",
"-lsfml-graphics",
"-lsfml-window",
"-lsfml-system"]
},
{
"name": "Run",
"cmd": ["export", "LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib", "&&", "./YorickTheSavant"]
}
]
}
"Run" 变体是我正在使用的变体。当游戏在终端外和 Sublime Text 2 中启动时,我该如何做到这一行自动包含在内?
.sublime-build 文件中的 cmd
键将程序指定为 运行。
第一个值应该是程序,其余的是参数,
所以当它找不到名为 export
的程序时它会失败 - 因为它是 shell 内置的。
为了 运行 shell 中的整个命令(就像手动执行时一样),您可以在 Run
变体中指定 "shell" : true
(或使用shell_cmd
而不是 cmd
):
{
"name": "Run",
"cmd": ["export", "LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib", "&&", "./YorickTheSavant"],
"shell" : true
}
这应该比直接调用 /bin/sh -c <stuff>
效果更好,而且我认为您不再需要将 cmd 数组中的条目压缩成一个字符串。
或者,您也可以尝试使用 env
键(也可以找到 here)在 运行 安装您的可执行文件之前指定 LD_LIBRARY_PATH
环境变量:
{
"name": "Run",
"cmd": ["./YorickTheSavant"],
"env" : { "LD_LIBRARY_PATH" : "/home/dan/SFML-2.3.1/lib" }
}