1

我在自己的子目录中有一堆 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 周,等等)

4

2 回答 2

3

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

由于(显然)每个可执行文件都依赖于同一目录中的所有.h.cpp文件,因此生成文件将很容易编写 - 每个都将具有以下内容:

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

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

 run:
     whatever.exe

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

然后,您(可能)需要根目录中的 makefile 递归地在每个子目录中创建目标,然后运行每个子目录(如上所述)。

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

于 2013-07-17T05:29:04.503 回答
0

假设您有一个目录,其所有直接子目录都是 c++ 程序,然后对此使用一些变体......

for D in */; do cd "$D";
    # then either call make or call your g++ 
    # with whatever arguments in here
    # or nest that script you found online if it seems to
    # be doing the trick for you.
    cd ../;
done;

这将移入每个目录,做它的事情(无论你想要什么),然后移出。

于 2013-07-17T05:04:50.793 回答