0

我正在尝试在 Linux 上的 Sublime Text 3 中构建一个 C++ 项目。通常我只是切换到终端并运行make run它并运行。但是,我试图通过直接在 Sublime 中运行来简化流程。但是,按 Ctrl+Shift+B 只会出现两个选项:Make 和 Make clean。两者都将根据我的项目 Makefile 执行命令。但是没有Make run,所以无法直接按Ctrl+B运行项目。我希望有人可以对此提供一些见解!

这是我的Makefile:

BINARY := build/project
SRCS := $(shell find . -iname "*.cpp")
OBJS := $(addprefix build/,$(SRCS:.cpp=.o))

NEEDED_LIBS := 

CXX := g++ -flto
LD := $(CXX) $(addprefix libs/,$(NEEDED_LIBS))
override CXXFLAGS += -std=c++11
override LDFLAGS += $(CXXFLAGS)

all:$(BINARY)

$(BINARY):$(OBJS) $(addprefix libs/,$(NEEDED_LIBS))
    $(LD) $(LDFLAGS) -o $@ $^

build/%.o:%.cpp
    $(CXX) -O2 -c $(CXXFLAGS) $< -o $@

run:$(BINARY)
    @$(BINARY)
    
clean:
    rm -rf build/*
4

1 回答 1

2

这个的默认构建是Makefile/Make.sublime-build,它看起来像这样:

{
    "shell_cmd": "make",
    "file_regex": "^(..[^:\n]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${folder:${project_path:${file_path}}}",
    "selector": "source.makefile",
    "syntax": "Packages/Makefile/Make Output.sublime-syntax",
    "keyfiles": ["Makefile", "makefile"],

    "variants":
    [
        {
            "name": "Clean",
            "shell_cmd": "make clean"
        }
    ]
}

也就是说,默认情况下它只是运行Make,但它也有一个名为的变体Clean也将运行make clean。特别是,这指出命令列表是静态的,不依赖于相关 Makefile 的实际内容。

您可以做的是Tools > Build System > New Build System从菜单中选择,这将创建一个新选项卡并提供默认构建系统。选择所有这些内容,然后将其替换为上述内容的副本,以便您拥有基本构建系统的副本。然后,您可以根据需要添加其他变体。例如:

    "variants":
    [
        {
            "name": "Clean",
            "shell_cmd": "make clean"
        },
        {
            "name": "Run",
            "shell_cmd": "make run"
        }
    ]

完成后,将文件保存在 Sublime 默认为(您的User包)的位置,并使用自定义名称,Custom Makefile.sublime-build例如(位置和扩展名是重要部分)。

完成此操作后,您将看到您的构建系统出现在菜单下Tools > Build System,其名称为您保存文件的名称。您可以在此处选择构建以使用它,也可以将其设置为自动。

当您使用ctrl+shift+bnext 时,此构建系统中的选项将出现在列表中(如果构建设置为自动,您也会看到默认选项)。

于 2020-11-11T19:06:33.383 回答