我正在编写自定义LLVM分析传递,并希望在传递的do_finalization
方法中输出一个简单的CSV文件。我想根据传递给Clang / LLVM的所需输出文件名来命名CSV文件,但是我找不到这个值。
例如,如果我使用:
进行编译 clang -o test test.c
我想输出test.csv
(或更一般地<output filename>.csv
)。我在哪里可以找到值test
?
答案 0 :(得分:0)
它定义于 LIB / TableGen / Main.cpp的
static cl::opt<std::string>
OutputFilename("o", cl::desc("Output filename"),
cl::value_desc("filename"),
cl::init("-"));
您可以在分析过程中定义命令选项,并将该值作为输出文件名。
答案 1 :(得分:0)
您可以使用cl::getRegisteredOptions
获取cl::Option*
指针并将其向下转换为声明选项的类型:
std::string &OutputFilename () {
auto *option = static_cast<llvm::cl::opt<std::string>*>(
llvm::cl::getRegisteredOptions().lookup("o"));
return option->getValue();
}
如果使用标准输出,这将返回在命令行中指定的-o
的值或"-"
。
关于类型不安全的常用预防措施适用。