clang-cl /fallback 模式

最近在Windows平台出现了很多的 LLVM工具 (参见 Windows下的LLVM工具链先锋). 这导致了一种新的Clang驱动模式:clang-cl 的产生. 这种方式可以使Clang能用Visual Studio的编译器,像cl.exe来编译程序。举个例子, 一个典型的Clang编译命令行指令为"clang hello.cc -o hello", 现在我们用cl.exe的命令好语法来编译,使用"cl.exe hello.cc /Fehello". 这样我们可以用 "cl.exe" 的指令来编译"clang-cl"的程序. 这会易于Clang在Visual Studio实现项目了.

大多数情况下, clang-cl的参数跟cl.exe都是一致的. 然而, 他也接受Clang的一些特定选项. 最近加入了/fallback标记. 这个标记的目的是为了编译一些Clang不能编译的代码。下面将给出例子如何使用 /fallback 标记.

clang-cl工作在 /fallback模式下是首次尝试编译Clang的代码,如果失败,出于某种原因,它会使用cl.exe来尝试编译.参照一下两个文件,main.cpp可以通过编译,printer.cpp编译不能通过:
1 printer.cpp:
2  
3 #include <iostream>
4 void print_hello(const char *s) {
5   std::cout << "Hello from " << s << "!" << std::endl;
6 }
1 main.cpp:
2  
3 extern void print_hello(const char*);
4 int main(int argc, char **argv) {
5   print_hello(argv[0]);
6   return 0;
7 }
clang-cl 不能编译 printer.cpp因为它引用了iostream,但iostream使用了一个不能完全支持的语言特性(希望他们赶紧被支持)。 clang-cl 依然可以使用 /  fallback 模式来编译这两个文件:
1 clang-cl /fallback /Fehello main.cpp printer.cpp

Clang会成功编译main.cpp,打印一些关于他不支持printer.cpp的错误信息, 并回退到cl.exe来编译这个文件.编译完成的文件会被连接到hello.exe这个文件上.

注意: 即使clang-cl认为它编译成功了一个文件,也很有可能在编译完成的代码在运行时会导致一些bug或 failure的产生.

到现在, /fallback 模式可能会导致clang-cl 产生各种错误问题。将来,它将改善到会导致一些内部错误,随着Windows对Clang的支持的加深,/fallback 就可以不必要使用甚至可以永久的从规范中删除了。clang-cl仍处于初级阶段, 但你可以自己尝试从LLVM快速构建站点下载到它的工具链。

你可能感兴趣的:(工作,bug,语言,编译器,Visual,Studio)