【问题标题】:How do I compile multi-file C++ programs in all subdirectories?如何在所有子目录中编译多文件 C++ 程序?
【发布时间】:2013-07-15 12:19:58
【问题描述】:

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

【问题讨论】:

    标签: c++ bash unix compilation


    【解决方案1】:

    除非你是自虐狂,否则请使用 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 递归地在每个子目录中创建目标,然后运行每个子目录(如上所述)。

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

    【讨论】:

    • 你必须借助makefile。如果不想自己写makefile,可以使用cmake,它可以用来生成make文件……也可以参考cmake.org
    【解决方案2】:

    假设您有一个目录,其所有直接子目录都是 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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2023-03-09
      • 2018-02-02
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多