使用sublime-build时不能运行c++程序,从终端运行时工作正常

Cannot run C++ program when using sublime-build, works fine when running from terminal

本文关键字:终端 运行时 工作 程序 sublime-build 不能 运行 c++ 使用      更新时间:2023-10-16

我正在尝试在Linux/Ubuntu 14.04上运行c++程序

我正在使用SFML库,如果SFML安装在非标准路径(它确实是),则教程建议在运行之前包含这一行:

$ export LD_LIBRARY_PATH=<sfml-install-path>/lib

我可以使用以下输入从终端运行程序:

$ export LD_LIBRARY_PATH=/home/dan/SFML-2.3.1/lib && ./YorickTheSavant

但是,当尝试在Sublime - Text 2中使用Sublime -build文件启动程序时,我得到以下错误:

[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"]
    }
]
}

"运行"的变体是我正在使用的。当游戏在终端外启动时,我该如何让这一行自动包含在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键(也可以在这里找到)在运行可执行文件之前指定LD_LIBRARY_PATH环境变量:

{
    "name": "Run",
    "cmd": ["./YorickTheSavant"],
    "env" : { "LD_LIBRARY_PATH" : "/home/dan/SFML-2.3.1/lib" }
}