gpt4 book ai didi

c - 编译和链接所有 C 文件的别名或命令

转载 作者:IT王子 更新时间:2023-10-29 01:04:35 26 4
gpt4 key购买 nike

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

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

alias compile='ls *.c *.h | gcc -o main'

我发现它有时能工作,但大多数时候编译会返回这个:

gcc: fatal error: no input files

compilation terminated.

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

感谢帮助

最佳答案

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

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

但是您根本不需要(或不想)xargsls 或此处的标准输入。

如果您只想将每个 .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 和大约一百万个其他工具)。

关于c - 编译和链接所有 C 文件的别名或命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33616163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com