我最近开始使用gcc命令手动编译/链接我的C文件.但是,它需要在命令末尾键入所有源文件.当有许多文件要编译/链接时,它可能很无聊.
这就是为什么我想为命令创建一个bash别名,直接输入文件夹的所有* .h和* .c文件.
我在.bashrc中的这一行是这样的:
alias compile=’ls *.c *.h | gcc -o main’
我发现它工作了一段时间,但大多数时候编译将返回这个:
gcc: fatal error: no input files
compilation terminated.
我认为管道会将ls * .c * .h的结果作为gcc的参数,但它似乎不会那样工作.我究竟做错了什么?有没有更好的方法来实现同样的目标?
谢谢你的帮助
您需要xargs将标准输入转换为命令行参数.
但是你根本不需要(或想要)xargs或ls或标准输入.
如果您只想将每个.c文件编译到可执行文件中,那么只需使用:
gcc -o main *.c
(gcc命令行通常不需要.h文件.)
正如Kay在评论中指出的那样,上述命令的迂腐正确和更安全的版本是(我不打算以贬义的方式):
gcc -o main ./*.c
有关此处各种问题的详细讨论,请参见Filenames and Pathnames in Shell: How to do it Correctly.
话虽这么说,你可以使用任何一种工具来避免需要这样做,并且只需要在一些事情发生变化时就需要重建所有东西.
诸如make或其许多克隆之类的工具,“前端”(例如autotools,cmake)或替代品(tup,scons,cons和大约一百万个其他工具).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。