如何在 sublime text 中始终 link 数学?
How to always link math in sublime text?
每当我想用数学函数构建一个 C 程序时,它都会抱怨未定义的引用,因为 sublime text 3 默认不 link 数学。
我尝试了什么:
- 找到默认构建系统以便我可以添加
-lm
,但我找不到它。
- 添加
#pragma comments
:
#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-build
和C++ Single File.sublime-build
。两者都包含在 C++
包中(它们的语法也是如此)。
正如您所注意到的,这些构建系统中提供的命令行非常简单,适用于简单的单文件程序。除此之外的任何东西实际上都是更专用构建环境的权限,例如 make
等(Sublime 支持 Makefile
开箱即用的构建)。
构建系统本身位于 sublime-package
文件中,这就是为什么您无法通过搜索文件系统找到它们的原因。有两种方法可以进行这样的调整;您可以基于内置的构建新构建,也可以 override
内部构建。
创建新版本
使用命令面板中的 View Package File
,然后输入 C single file
过滤包资源列表,然后 select C++/C Single File.sublime Build
(或 C++
一个,视情况而定)打开资源。
文件将打开 read-only
因为它存储在一个包中;使用菜单中的 Tools > Build System > New Build System...
创建存根构建系统模板
从打开的文件中复制文本,并用它来替换存根文件中的文本。
适当调整 build/command 行,然后将文件另存为 sublime-build
文件,保存在保存对话框默认的位置(即您的 User
包)
该构建现在可以使用您保存它的名称;你可以直接 select 它或者将构建系统设置为 Automatic
并使用 Tools > Build With...
进行你的第一次构建,这样 Sublime 会提示你使用构建系统(它会在你之后记住你的决定选它)。
覆盖内部构建系统(手动)
如上面的第 1 步,打开要覆盖的构建系统;将鼠标悬停在选项卡上并记下文件名,该文件名将出现在您的正常 Packages
目录中,即使该文件不存在。
使用 Preferences > Browse Packages
在文件浏览器中打开 Packages
文件夹。如果构建所在的包还没有文件夹(此处 C
或 C++
),请创建一个
保存打开的构建系统,这会将其放入您刚创建的文件夹中。
文件缓冲区不允许您输入,因为它最初是从 sublime-package
文件打开的;关闭文件并使用 File > Open Recent > Reopen closed file
重新打开它并根据需要进行编辑。
由于您覆盖了内部构建系统,您可以像以前一样继续构建。
覆盖内部构建系统(通过 OverrideAudit)
安装OverrideAudit包(免责声明:我是作者)
在其他方法中按照步骤 #1 打开资源
右键单击文件并选择 OverrideAudit: Override this resource
或从命令面板中选择 OverrideAudit: Override Current Resource
缓冲区现在可以编辑了;根据需要进行更改,然后正常保存文件以创建覆盖(如果您关闭文件而不进行更改,则不会发生任何事情)
如上所述,由于您已经覆盖了内部文件,因此您当前所做的构建将继续工作。
如果您使用任何一种 override
方法,您最终会在 Packages
文件夹中得到一个文件,其名称和位置完全模仿源文件的名称 sublime-package
文件。
Sublime 将永久使用该资源代替原始文件,即使源文件发生变化(新功能、错误修复、被删除等)。这可能会导致问题(尽管对于构建系统而言风险非常小)。
上面的 OverrideAudit 包对 Sublime 和包升级进行检查,以在这可能是一个问题时警告您,并包含其他功能,让您可以准确地看到您正在覆盖什么以及如何覆盖。因此,如果您想走覆盖路线,我会推荐它。
我在 safely modifying package files 上的视频中也演示了所有这些方法,如果您想实际观看的话。
每当我想用数学函数构建一个 C 程序时,它都会抱怨未定义的引用,因为 sublime text 3 默认不 link 数学。
我尝试了什么:
- 找到默认构建系统以便我可以添加
-lm
,但我找不到它。 - 添加
#pragma comments
:
#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-build
和C++ Single File.sublime-build
。两者都包含在 C++
包中(它们的语法也是如此)。
正如您所注意到的,这些构建系统中提供的命令行非常简单,适用于简单的单文件程序。除此之外的任何东西实际上都是更专用构建环境的权限,例如 make
等(Sublime 支持 Makefile
开箱即用的构建)。
构建系统本身位于 sublime-package
文件中,这就是为什么您无法通过搜索文件系统找到它们的原因。有两种方法可以进行这样的调整;您可以基于内置的构建新构建,也可以 override
内部构建。
创建新版本
使用命令面板中的
View Package File
,然后输入C single file
过滤包资源列表,然后 selectC++/C Single File.sublime Build
(或C++
一个,视情况而定)打开资源。文件将打开
read-only
因为它存储在一个包中;使用菜单中的Tools > Build System > New Build System...
创建存根构建系统模板从打开的文件中复制文本,并用它来替换存根文件中的文本。
适当调整 build/command 行,然后将文件另存为
sublime-build
文件,保存在保存对话框默认的位置(即您的User
包)
该构建现在可以使用您保存它的名称;你可以直接 select 它或者将构建系统设置为 Automatic
并使用 Tools > Build With...
进行你的第一次构建,这样 Sublime 会提示你使用构建系统(它会在你之后记住你的决定选它)。
覆盖内部构建系统(手动)
如上面的第 1 步,打开要覆盖的构建系统;将鼠标悬停在选项卡上并记下文件名,该文件名将出现在您的正常
Packages
目录中,即使该文件不存在。使用
Preferences > Browse Packages
在文件浏览器中打开Packages
文件夹。如果构建所在的包还没有文件夹(此处C
或C++
),请创建一个保存打开的构建系统,这会将其放入您刚创建的文件夹中。
文件缓冲区不允许您输入,因为它最初是从
sublime-package
文件打开的;关闭文件并使用File > Open Recent > Reopen closed file
重新打开它并根据需要进行编辑。
由于您覆盖了内部构建系统,您可以像以前一样继续构建。
覆盖内部构建系统(通过 OverrideAudit)
安装OverrideAudit包(免责声明:我是作者)
在其他方法中按照步骤 #1 打开资源
右键单击文件并选择
OverrideAudit: Override this resource
或从命令面板中选择OverrideAudit: Override Current Resource
缓冲区现在可以编辑了;根据需要进行更改,然后正常保存文件以创建覆盖(如果您关闭文件而不进行更改,则不会发生任何事情)
如上所述,由于您已经覆盖了内部文件,因此您当前所做的构建将继续工作。
如果您使用任何一种 override
方法,您最终会在 Packages
文件夹中得到一个文件,其名称和位置完全模仿源文件的名称 sublime-package
文件。
Sublime 将永久使用该资源代替原始文件,即使源文件发生变化(新功能、错误修复、被删除等)。这可能会导致问题(尽管对于构建系统而言风险非常小)。
上面的 OverrideAudit 包对 Sublime 和包升级进行检查,以在这可能是一个问题时警告您,并包含其他功能,让您可以准确地看到您正在覆盖什么以及如何覆盖。因此,如果您想走覆盖路线,我会推荐它。
我在 safely modifying package files 上的视频中也演示了所有这些方法,如果您想实际观看的话。