首页 > 解决方案 > 使用 Powershell 命令将 cpp 文件的文件夹编译成 GNU 的 g++

问题描述

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

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

这是可能的/实用的还是我应该坚持使用makefile?

例如:
我从一本如何编程的书中“借来”了一个电梯模拟,该书有 12 个头文件,12 个类保存到单独的 cpp 文件中,1 个主要执行 cpp 在C:\Users\Noah\Desktop\ripsfromthebook\ch09\elevator.

让我们假设程序运行所需的一切都已存在,并且如果您将每个 cpp 文件名输入到 g++ 命令中,它将正确编译成工作的 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 命令中,那就太好了。

或使用字符串数组保存 childItem 输出,然后运行 ​​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到我的 makefile 中。

标签: c++powershellcompilationgnu

解决方案


如果您使用 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


推荐阅读