首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中,是否可以通过一条指令编译多个文件?

问在Linux中,是否可以通过一条指令编译多个文件?
EN

Stack Overflow用户
提问于 2022-02-22 12:25:25
回答 1查看 39关注 0票数 2

例如,在Linux中,要将3个文件"test1.c“、"test2.c”和"test3.c“分别编译为"test1”、"test2“和"test3",是否有办法使用通配符或管道通过一行bash指令来实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 13:40:40

没有真正的"bash指令“,即使您说"bash命令”,gcc也不是真正的“bash指令”,因为它与bash没有本质的关联,或者是bash的一部分。它是一个单独的二进制/程序,可以在任何shell下运行,比如sh、ksh、ash、dash甚至tcsh。

假设你指的是一行,你可以做到:

代码语言:javascript
复制
gcc prog1.c -o prog1 & gcc prog2.c -o prog2 & gcc -o prog3 prog3.c

你也可以像威廉建议的那样,在循环中做到这一点:

代码语言:javascript
复制
for f in test?.c; do gcc "$f" -o "${f%.c}" &  done

然而,最简单的是使用GNU并行

代码语言:javascript
复制
parallel gcc {} -o {.} ::: test?.c

有些人会正确地说,GNU并行并不是POSIX的一部分,但是,公平地说,您在问题中没有提到POSIX。因此,如果POSIX-遵从性是一个问题,您可以选择避免这一建议。

正如注释中所建议的那样,如果您创建一个名为Makefile的文件,其内容如下:

代码语言:javascript
复制
all: test1 test2 test3

您可以简单地运行:

代码语言:javascript
复制
make

所有三个程序都将被编译,只有在必要的情况下,即如果您自上次编译以来已经更改了源文件。或者,如果您想使用所有您向Intel支付的非常可观的核心,您可以与之并行地进行如下操作:

代码语言:javascript
复制
make -j
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71221277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档