Clang 3.8 C++ - 使用 LibTooling 读取目录中的所有源文件
Clang 3.8 C++ - reading all the source files in a directory using LibTooling
编辑:我正在使用Linux Fedora 22。
我正在使用Clang 3.8 LibTooling lib来读取Cpp源文件,解析AST,然后对我提取的数据进行一些处理。当我使用命令行在单个文件或作为输入的多个文件上调用我的工具时,一切正常。
但是,如果有数十个或数百个文件,则一次又一次地编写所有文件变得不可行。那么,有没有办法应对呢?例如,我将所有源文件名转储到 txt 文件中,并将其作为工具的输入,希望 Clang 的命令行解析器能够从给定路径读取文件,还是其他方式?
例如,这工作正常:
toolname f1.cpp f2.cpp --
但是如何在不给出所有文件名的情况下执行此操作:
toolname f1.cpp .......f1000.cpp --
您应该提供有关操作系统的信息,因为它很重要。
假设您使用的是 linux,请尝试以下操作:
toolname $(find directory -name "*.cpp") --
其中,目录是包含要处理的文件的目录的路径。
$(...) 是 Linux 的 shell 语法。它启动括号之间的内容,并在完成后将整个 $(...) 文本替换为启动命令的标准输出。find是 Linux 命令,它在目录(及其子目录)中搜索符合给定条件的文件(例如,仅给出 -name -文件名,忽略目录,必须与 *.cpp 模式匹配)。所以假设目录将是/home/q,并且将有三个文件:
/home/q/a.cpp
/home/q/a.h
/home/q/b.cpp
发射
toolname $(find /home/q -name "*.cpp") --
将启动子命令
find /home/q -name "*.cpp"
这将输出
/home/q/a.cpp
/home/q/b.cpp
(a.h将被忽略,因为它与-name模式不匹配),这将被放回原始命令中:
toolname /home/a.cpp /home/b.cpp --
在Windows的情况下,您可以使用python脚本,例如:
import os, sys, subprocess
toolname = os.path.abspath(sys.argv[1])
path = os.path.abspath(sys.argv[2])
args = [toolname]
for name in os.listdir(path):
if name.endswith('.cpp'):
args.append(os.path.join(path, name))
sys.exit(subprocess.call(args))
其中第一个参数是工具的路径,第二个参数是包含文件的目录的路径(非递归)。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 重新定位源文件时读取调试符号
- Clang 3.8 C++ - 使用 LibTooling 读取目录中的所有源文件