c++ - 使用 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 中。
解决方案
如果您使用 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
推荐阅读
- javascript - 如何解决“我们这次不执行 document.execCommand(),因为它是递归调用的”execCommand delete
- python - 如何将数据从一个功能传输到另一个功能?
- c++ - 我如何并行化这种蛮力攻击算法
- c - 如何顺序打印多个文件中的行?
- javascript - JavaScript 停止加载 href
- python - 基于键匹配合并字典的最快方法
- python - 视窗!路径字符串 \ 被转换为 \\\\
- java - 遍历 Trie
- django - 使用 Celery 的单个 Django 模型的每个对象的不同 crontab
- r - 转换 R 脚本的简单哈希表