背景:我最初是在1990年在DOS 6上用TurboC学习C语言的;有很多东西Turbo C认为是标准的,但显然不是(即使在那时)。
现在我正在通过“88 C程序”来刷新自己。我发现当我需要在GCC上使用math.h
中的函数时(如sqrt()
、log10()
等),我不得不手动链接数学库,方法是在GCC命令的末尾追加-lm
。(比方说,使用一个环境变量),这样,如果我有#include "math.h"
,我会自动将-lm
添加到编译命令中,而不必记住键入它?
作为一个四核CPU上的单个用户,我并不担心微小的性能差异。
潜在重要性:我使用的GCC版本及其依赖项可以在Ubuntu存储库中找到,在Kubuntu 14.04上。
有没有办法将-lm设置为GCC的默认值?
3条答案
按热度按时间pgccezyw1#
如果你使用的是Bash(或其他Bourne派生的shell),你可以定义一个shell函数。
别名不能完成这项工作,因为
-lm
参数必须 * 跟随 * 依赖于数学库的源文件或目标文件的名称。(-lm
参数被传递给链接器,链接器跟踪每个文件的未解析引用;那些未解析的引用可以由后面的参数来解析。)(C shell(
csh
)别名比Bash别名的功能稍强一些,但C shell没有shell函数。)请注意,这个函数要求您使用不同的命令名。如果您想输入
gcc
并让它调用带有附加参数的gcc
命令,您需要做一些额外的工作以避免函数调用自身:或:
command
是一个Bash内置函数,它可以调用指定的命令,同时绕过任何同名的shell函数。或者,您可以指定gcc
的完整路径。gcc的默认模式是相当宽松的,并且它支持gnu 90语言的方言(带有GNU特定扩展的C89)。您可以指定额外的参数来识别更现代的语言版本,并执行更多的编译时检查:
另一种方法是编写一个 Package 器脚本,并将其放在
$PATH
中/usr/bin
之前的目录中,例如$HOME/bin
。(Some命令识别隐式添加命令行选项的环境变量;例如,GNU
grep
可以识别$GREP_OPTIONS
,而gcc则不能。)g6ll5ycj2#
我建议你写一个GNU的Make脚本。
将以下脚本放入名为
makefile
的文件中:然后,当您想要编译时,请输入
make
或make all
。具体地说,
$elf
存储您要调用的可执行文件的名称,替换它,或前面没有任何空间。
顺便说一句,这个makefile可能会被滥用。它节省了时间,但是请不要使用它,除非你只是想做一个小的测试。
您可以使用
或者在一行中生成多个ELF文件。但在这种情况下,链接器会尝试将所有
.o
文件链接在一起,这可能会生成难以理解的错误信息。但无论如何,听起来你只是想要一些小的测试用例,所以...f8rj6qna3#
使用Makefile的另一种可能性是在.bashrc文件中添加别名。
然后,在为 .bashrc 文件提供资源后,您可以将其用于:
gccm
。但说真的,你只需要再 * 保存 * 三个字符。