概述别名或命令来编译和链接所有的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文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容