别名或命令来编译和链接所有的C文件【JAVA教程】

!
也想出现在这里? 联系我们
信息

别名或命令来编译和链接所有的C文件,第1张

概述别名命令编译和链接所有的C文件

我最近开始使用gcc命令手动编译/链接我的C文件。 但是,它要求在命令末尾键入所有的源文件。 当有很多文件编译/链接时可能会很无聊。 这就是为什么我有这样的想法,为命令直接键入该文件夹的所有* .h和* .c文件的bash别名。

我在.bashrc中的行是这样的:

别名compile =\’ls * .c * .h | gcc -o main\’

我发现它工作了一段时间,但大部分时间编译将返回这个:

如何在awk中使用bash命令

如何让GNU屏幕读取.bash_profile / .bash_rc更改?

C#到单一的GetConsoleWindowexception

netcat的linux脚本在x小时后停止工作

当我在Bash脚本中使用&function时会发生什么?

gcc:致命错误:没有input文件

编译终止。

我认为pipe道会把ls * .c * .h的结果作为gcc的参数,但是似乎并不是这样工作的。 我究竟做错了什么? 有没有更好的方法来实现同样的事情?

感谢您的帮助

为什么每次运行一个命令时都不会改变位置variables

:处理很多信号

EXT4上的时间戳精度(亚毫秒)

grep在bash脚本内部失败,但在命令行上工作

如何在bash中获取MouseMove和MouseClick?

管道不会创建命令行参数。 管道输入标准输入。

您需要xargs将标准输入转换为命令行参数。

但是你根本不需要(或者不需要) xargs或者ls或者标准输入。

如果你只是想编译每个.c文件到你的可执行文件中,那么就使用:

gcc -o main *.c

(你通常不需要gcc命令行上的.h文件。)

正如凯在评论中指出的那样,上述命令的迂回正确和安全的版本是(我不打算用贬义的方式):

gcc -o main ./*.c

请参阅Shell中的文件名和路径名:如何正确地进行此处的各种问题的广泛讨论。

这就是说,你可以使用许多工具中的任何一种来避免需要这样做,并且在只有一些事情发生变化时需要重建所有的东西。

诸如make或其许多克隆,“前端”(例如autotools,cmake)或替换(tup,scons,cons和大约一百万种其他工具)的工具。

你有没有尝试过使用makefile ? 这听起来似乎可能是更有效的你想要做什么。

如果你真的想用BASH别名来做,你必须使用xargs来获得命令行参数的标准输入。

这里有几个误解:

管道将第一个命令的标准输出重定向到第二个命令的标准输入; 但是,gcc不接受在stdin上编译的文件,而是在命令行上;

通配符语法对于ls来说并不神奇,它是在命令行上执行扩展的shell;

头文件不被编译 – 你编译的.c文件,这反过来可能包括标题。

有了这些知识,你就会明白正确的命令就像

gcc -o main *.c

其实我们可以做得更好:首先,你需要把*.c ./*.c ; 这可以防止名称以-开始的文件被解释为命令行选项。

最重要的是,你应该真的启用编译器警告,他们可以救命。 你会想要添加-Wall和-Wextra 。

gcc -Wall -Wextra -o main ./*.c

最后,值得一提的是,默认情况下,您正在编译禁用优化。 如果您正在调试,那么还可以添加-g以使可执行文件可用于调试; 否则,如果目标是速度,你至少应该添加-O2 。

总结

以上是内存溢出为你收集整理的别名或命令来编译和链接所有的C文件全部内容,希望文章能够帮你解决别名或命令来编译和链接所有的C文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞86 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容