我在许多文件夹中有许多源文件。有没有一种方法可以一次性编译所有它们,而不需要命名它们?
我知道我可以说
g++ -o out *.cpp 但当我尝试的时候
g++ -o out *.cpp folder/*.cpp我得到一个错误。
这样做的正确方法是什么?我知道使用makefile是可能的,但是仅仅使用g++就可以做到吗?
发布于 2020-09-03 00:40:25
如果所有文件都包含自己的主文件,并且不是同一项目/程序的一部分,则您可能希望保留其原始名称,并为每个文件创建一个可执行文件。如果是这种情况,您可以使用awk
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函数执行的命令。
以上命令的最短版本为:
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所述
find . -type f -name "* *.cpp" -exec bash -c 'mv "$0" "${0// /_}"' {} \;https://stackoverflow.com/questions/33662375
复制相似问题