如何在 sublime text 中始终 link 数学?

How to always link math in sublime text?

每当我想用数学函数构建一个 C 程序时,它都会抱怨未定义的引用,因为 sublime text 3 默认不 link 数学。

我尝试了什么:

#include <math.h>
#pragma comment(lib, "math")
#pragma comment(lib, "m")
#pragma comment(l, "math")
#pragma comment(l, "m")
#pragma comment(math, "math")
#pragma comment(m, "m")

None 其中有效

编译C/C++程序的构建系统分别是C Single File.sublime-buildC++ Single File.sublime-build。两者都包含在 C++ 包中(它们的语法也是如此)。

正如您所注意到的,这些构建系统中提供的命令行非常简单,适用于简单的单文件程序。除此之外的任何东西实际上都是更专用构建环境的权限,例如 make 等(Sublime 支持 Makefile 开箱即用的构建)。

构建系统本身位于 sublime-package 文件中,这就是为什么您无法通过搜索文件系统找到它们的原因。有两种方法可以进行这样的调整;您可以基于内置的构建新构建,也可以 override 内部构建。

创建新版本

  1. 使用命令面板中的 View Package File,然后输入 C single file 过滤包资源列表,然后 select C++/C Single File.sublime Build (或 C++ 一个,视情况而定)打开资源。

  2. 文件将打开 read-only 因为它存储在一个包中;使用菜单中的 Tools > Build System > New Build System... 创建存根构建系统模板

  3. 从打开的文件中复制文本,并用它来替换存根文件中的文本。

  4. 适当调整 build/command 行,然后将文件另存为 sublime-build 文件,保存在保存对话框默认的位置(即您的 User包)

该构建现在可以使用您保存它的名称;你可以直接 select 它或者将构建系统设置为 Automatic 并使用 Tools > Build With... 进行你的第一次构建,这样 Sublime 会提示你使用构建系统(它会在你之后记住你的决定选它)。

覆盖内部构建系统(手动)

  1. 如上面的第 1 步,打开要覆盖的构建系统;将鼠标悬停在选项卡上并记下文件名,该文件名将出现在您的正常 Packages 目录中,即使该文件不存在。

  2. 使用 Preferences > Browse Packages 在文件浏览器中打开 Packages 文件夹。如果构建所在的包还没有文件夹(此处 CC++),请创建一个

  3. 保存打开的构建系统,这会将其放入您刚创建的文件夹中。

  4. 文件缓冲区不允许您输入,因为它最初是从 sublime-package 文件打开的;关闭文件并使用 File > Open Recent > Reopen closed file 重新打开它并根据需要进行编辑。

由于您覆盖了内部构建系统,您可以像以前一样继续构建。

覆盖内部构建系统(通过 OverrideAudit)

  1. 安装OverrideAudit包(免责声明:我是作者)

  2. 在其他方法中按照步骤 #1 打开资源

  3. 右键单击文件并选择 OverrideAudit: Override this resource 或从命令面板中选择 OverrideAudit: Override Current Resource

  4. 缓冲区现在可以编辑了;根据需要进行更改,然后正常保存文件以创建覆盖(如果您关闭文件而不进行更改,则不会发生任何事情)

如上所述,由于您已经覆盖了内部文件,因此您当前所做的构建将继续工作。


如果您使用任何一种 override 方法,您最终会在 Packages 文件夹中得到一个文件,其名称和位置完全模仿源文件的名称 sublime-package 文件。

Sublime 将永久使用该资源代替原始文件,即使源文件发生变化(新功能、错误修复、被删除等)。这可能会导致问题(尽管对于构建系统而言风险非常小)。

上面的 OverrideAudit 包对 Sublime 和包升级进行检查,以在这可能是一个问题时警告您,并包含其他功能,让您可以准确地看到您正在覆盖什么以及如何覆盖。因此,如果您想走覆盖路线,我会推荐它。

我在 safely modifying package files 上的视频中也演示了所有这些方法,如果您想实际观看的话。