gpt4 book ai didi

c++ - 如何在所有子目录中编译多文件 C++ 程序?

转载 作者:行者123 更新时间:2023-11-30 02:53:43 24 4
gpt4 key购买 nike

我有一堆 C++ 程序,每个程序都在其自己的子目录中。每个子目录在几个文件中都有一个 C++ 程序——每个类的一个 .h 和一个 .cpp 文件加上一个主 .cpp 程序。我想编译每个程序,将可执行文件放在相应的子目录中。 (我还想运行每个程序并将其输出重定向到一个文件,该文件位于相应的子目录中,但如果我能让编译正常工作,我应该不会在弄清楚这部分时遇到问题。)

我在 UNIX 系统上使用 bash shell(实际上是运行在 Windows 之上的 UNIX 模拟器 Cygwin)。

我设法在网上找到了一个用于在当前目录中编译单文件程序的简短脚本,但这是我所能找到的。该脚本如下。

for f in *.cpp;
do g++ -Wall -O2 "$f" -o "{f/.cpp/}";
done;

如果有人能帮助我,我将不胜感激。我需要平均每两周执行一次此任务(更像是连续 8 周,然后不是连续 8 周,等等)

最佳答案

除非你是受虐狂,否则请使用 makefile 而不是 shell 脚本。

因为(显然)每个可执行文件都依赖于同一目录中的所有 .h.cpp 文件,所以 makefile 很容易编写——每个文件都有像这样的东西:

whatever.exe: x.obj y.obj z.obj
g++ -o whatever.exe x.obj y.obj z.obj

您还可以在每个目标中添加一个目标以运行生成的可执行文件:

 run:
whatever.exe

有了它,您将使用 make run 来运行可执行文件。

然后您(可能)需要在根目录中有一个 makefile,它递归地在每个子目录中生成目标,然后运行每个子目录(如上所述)。

它有几个优点——主要是它实际上是为这类任务而构建的,所以它实际上做得很好。另一个是它会记录文件上的时间戳,因此它只会重建实际需要它的可执行文件(即,自可执行文件本身构建以来,至少有一个可执行文件所依赖的文件已被修改)。

关于c++ - 如何在所有子目录中编译多文件 C++ 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17691449/

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