使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++

compile folder of cpp files into GNU's g++ using Powershell commands

本文关键字:文件夹 编译 GNU g++ 文件 Powershell 命令 cpp 使用      更新时间:2023-10-16

我正在寻找一种方法,将完整的文件夹的 c++ 命令管道到 g++ 中,这样我就不必在g++命令中键入 25 个文件名。

我正在使用Powershell,并认为我可以以某种方式使用带有Get-childItem -Name -Path *.cpp的管道。这样整个文件夹可以一次编译,而不会让我丢失文件或拼写错误的文件名,并且足够模块化,我可以在粘贴之前使用Set-Location folderpath,而不必每次制作具有中等~大量链接文件的链接程序时都编写新的makefile。

这是可能的/实用的还是我应该坚持使用生成文件?

例如:
我有一个电梯模拟从一本如何编程书中"借用"的,该书有 12 个头文件、12 个类保存到单独的 cpp 文件中,以及 1 个主执行 cpp 在C:UsersNoahDesktopripsfromthebookch09elevator

让我们假设程序工作所需的一切都存在,如果您在 G++ 命令中键入每个 cpp 文件名,它将正确编译为工作 A.exe 文件。

它们被命名为:

bell.cpp
bell.h
building.cpp
building.h
button.cpp
button.h
clock.cpp
clock.h
door.cpp
door.h
elevator.cpp
elevator.h
elevatorButton.cpp
elevatorButton.h
ElevatorSimulation.cpp
floor.cpp
floor.h
floorButton.cpp
floorButton.h
light.cpp
light.h
person.cpp
person.h
scheduler.cpp
scheduler.h

如果我可以使用类似于Get-ChildItem -Name -Path *.cpp | g++ -g的东西将所有 13 个~.cpp文件名用作输入,而不必将这个怪物 {见下文}写到 powershell 命令中,那就太好了。

或者使用字符串数组保存子项输出,然后运行 g++

$x = Get-ChildItem -name -path *.cpp
g++ -g $x -o main

会比这个怪物好。

g++ -g bell.cpp building.cpp button.cpp clock.cpp door.cpp elevator.cpp elevatorButton.cpp ElevatorSimulation.cpp floor.cpp floorButton.cpp light.cpp person.cpp scheduler.cpp

短期解决方案 我正在将Get-ChildItem的输出复制/粘贴到我的制作文件中。

如果你正在使用Cmakelists来构建你的库/exe,你可以使用file((,如下所示:

file(GLOB your_src "relativePath/*.h" "relativePath/*.cpp") add_executable(your_exe ${your_src})

但似乎建议不要

GLOB 将生成与通配表达式匹配的所有文件的列表,并将其存储到变量中。通配表达式类似于正则表达式,但要简单得多。如果为表达式指定了 RELATIVE 标志,则结果将作为给定路径的相对路径返回。(我们不建议使用 GLOB 从源树中收集源文件列表。如果没有 CMakeLists.txt则在添加或删除源时文件会更改,则生成的生成系统无法知道何时要求 CMake 重新生成。 来源: https://cmake.org/cmake/help/v3.0/command/file.html#file