仅为几种语言构建clang前端(比如C和C ++)

时间:2017-09-22 17:29:53

标签: clang llvm

我正在尝试构建clang,但构建大小非常大。由于clang也支持非C系列语言(例如Java,Fortran),有没有办法在构建期间关闭它。我只想支持C和C ++而不关心其他语言。

是否需要设置CMake选项来执行此操作?

非常感谢!

最诚挚的问候, 尼蒂什

3 个答案:

答案 0 :(得分:1)

正如其他人所评论的那样,clang只是一个C / C ++前端,而且没有Java / Fortran前端可以禁用。

但是,还有其他方法可以减少clang构建大小:

  • 选择合适的构建配置

    LLVM / clang的默认构建配置是Debug。使用大量可执行文件构建Debug(未指定构建配置)结果,构建文件夹可能需要> 20GB。这主要是由于调试信息。

    如果您没有开发clang,并且不需要调试信息,则可以构建MinSizeRel,这是针对大小进行了优化的发布版本。

  • 调整构建设置

    如果您计划调试clang或进行轻量级开发,另一个选项是使用最小的调试信息构建 - -gmlt选项仅保留行调试信息,允许源步进,并且结果具有更紧凑的对象与完整调试信息(-g)相比较的文件。

  • 禁用构建组件

    您可以禁用构建中的某些组件,例如测试和示例:

    -DLLVM_INCLUDE_TESTS=Off -DLLVM_INCLUDE_EXAMPLES=Off

把它放在一起:

cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_INCLUDE_TESTS=Off -DLLVM_INCLUDE_EXAMPLES=Off

对于紧凑的调试版本:

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS=-gmlt -DLLVM_INCLUDE_TESTS=Off -DLLVM_INCLUDE_EXAMPLES=Off

希望这有帮助!

答案 1 :(得分:0)

答案很简单:clang是C / C ++前端,它既不支持Java也不支持Fortran,因此没有这样的选项 - 没有什么可以关闭的。

答案 2 :(得分:0)

我不确定它会有多大帮助,但是您可以针对大小优化clang的编译。像其他人所说的那样禁用调试符号也有帮助。生成clang时,将CFLAGS="-Os" CXXFLAGS="-Os"设置为环境变量。

这是来自GCC 4.8.5

  

-Os优化大小。 -Os启用所有通常不会增加代码大小的-O2优化。它还执行旨在减少代码大小的进一步优化。

     

-Os禁用以下优化标志:-falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks
             -freorder-blocks和分区-fprefetch-loop-arrays -ftree-vect-loop-version