首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编译一个目录中的所有cpp文件?

如何编译一个目录中的所有cpp文件?
EN

Stack Overflow用户
提问于 2015-11-12 08:24:18
回答 4查看 35.8K关注 0票数 14

我在许多文件夹中有许多源文件。有没有一种方法可以一次性编译所有它们,而不需要命名它们?

我知道我可以说

代码语言:javascript
复制
g++ -o out *.cpp 

但当我尝试的时候

代码语言:javascript
复制
g++ -o out *.cpp folder/*.cpp

我得到一个错误。

这样做的正确方法是什么?我知道使用makefile是可能的,但是仅仅使用g++就可以做到吗?

EN

Stack Overflow用户

发布于 2020-09-03 00:40:25

如果所有文件都包含自己的主文件,并且不是同一项目/程序的一部分,则您可能希望保留其原始名称,并为每个文件创建一个可执行文件。如果是这种情况,您可以使用awk

代码语言:javascript
复制
awk '{n=split(FILENAME, a, "."); outfile=sprintf("%s.out",a[n-1]); command=sprintf("g++ -I . %s -o %s", FILENAME, outfile); system(command); nextfile } ' *.cpp

开始时,使用split分隔文件名和扩展名,并将结果存储到数组a中。基本名称位于索引n-1,扩展名位于索引n。因此,我们将扩展名更改为.out,并使用sprintf将其存储到outfile变量中。同样,我们在shell中创建要由system函数执行的命令。

以上命令的最短版本为:

代码语言:javascript
复制
awk '{n=split(FILENAME, a, "."); command=sprintf("g++ -I . %s -o %s.out", FILENAME, a[n-1]); system(command); nextfile } ' *.cpp

您还可以按照@ #include -I的建议修改该命令以使用-I断开其他文件。

注意:如果任何文件名包含空格或多个点,则此解决方案不能很好地工作。在执行该命令之前,需要将这些字符替换为下划线,如here所述

代码语言:javascript
复制
find . -type f -name "* *.cpp" -exec bash -c 'mv "$0" "${0// /_}"' {} \;
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33662375

复制
相关文章

相似问题

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