【问题标题】:Where to find "-o" ("--output") argument in Clang/LLVM?在 Clang/LLVM 中哪里可以找到“-o”(“--output”)参数?
【发布时间】:2017-04-11 04:08:14
【问题描述】:

我正在编写自定义 LLVM 分析通道,并希望在通道的 do_finalization 方法中输出一个简单的 CSV 文件。我想根据传递给 Clang/LLVM 的所需输出文件名来命名 CSV 文件,但我找不到这个值。

例如,如果我编译:

clang -o test test.c

我想输出test.csv(或更一般的<output filename>.csv)。我在哪里可以找到值 test?

【问题讨论】:

    标签: llvm llvm-c++-api


    【解决方案1】:

    定义在 lib/TableGen/Main.cpp

    static cl::opt<std::string>
    OutputFilename("o", cl::desc("Output filename"), 
    cl::value_desc("filename"),
                   cl::init("-"));
    

    您可以在分析过程中定义一个命令选项,并将该值作为输出文件名。

    【讨论】:

      【解决方案2】:

      您可以使用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 的值,如果使用标准输出,则返回"-"。

      适用于类型不安全的常见预防措施。

      【讨论】:

      • 今天晚些时候我会测试这个;如果可行,我会接受。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2019-12-21
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      相关资源
      最近更新 更多