2011-06-07 22 views
11

我需要一些簡單的例子來開始使用clang。 我下載LLVM和鐺和內置:如何構建clang/examples/PrintFunctionNames?

mkdir llvm-build 
cd llvm-build 
../llvm/configure 
make 

我試圖建立從鐺例子PrintFunctionNames但得到一個錯誤信息:

../../../../Makefile.common: 61:../../../../Makefile.config:沒有這樣的文件或目錄 ../../../../Makefile.common:69:/Makefile.rules:沒有這樣的文件或目錄 使:*沒有規則使目標`/Makefile.rules'。停止。

自述文件說只需要make。 那麼如何構建這個插件?

回答

9

進入llvm-build/tools/clang,運行「make BUILD_EXAMPLES = 1」。

+0

我在llvm build目錄中找不到llvm-build/tools。它只有bin,include,lib。分享?誰能幫忙? – 2015-09-16 21:02:59

+0

我認爲他的build目錄被命名爲llvm-build。我在下面添加了我對這個問題的回覆。 – iwasz 2015-09-18 07:37:49

2

最有把握的是,你將有你的LLVM中繼線結帳,並在工具路徑下檢出了鐺中繼線[在通過http://clang.llvm.org/get_started.html建立Clang下的解釋。

編譯文件指南:http://llvm.org/docs/MakefileGuide.html

在OS X上構建設置是有點不同,但在Debian Linux上,我每天構建,如下所示:

../trunk/configure - enable-target = x86_64,arm,cpp,cbe --with-built-clang --enable-pic --enable-polly --enable-shared --with-cxx-include-arch = x86_64 --enable-optimized - -with-optimize-option = -Os --enable-assertions --disable-bootstrap --disable-multilib --enable -jit --enable-threads --no-create --no-recursion

然後應用在t上make -j(n + 1個內核)他命令我的奔騰d 945系統:

化妝[反對自動工具化妝-j(N + 1)並不總是建立LLVM乾淨,因爲它確實對cmake的建設。所以如果你想運行所有的核心,期望可以不止一次地運行make -j(n + 1)來產生一個乾淨的版本。

的標準格式,而無需訪問多個內核:

使BUILD_EXAMPLES =「1」 //讀取以下

的音符總是導致一個乾淨的構建,並且如果它不報告給LLVM的錯誤。

注意:如果你是在頂層,如下所示,你可以使用svn更新LLVM幹線,項目測試幹線和幹線鏗鏘:

撥打中繼線

然後去並再次運行make現在提前配置BUILD_EXAMPLES = 1。

使BUILD_EXAMPLES =「1」

注:自動工具將允許配置BUILD_EXAMPLES =「1」,但是當你去運行make如果你沒有明確包括BUILD_EXAMPLES ='1會忽略該標誌'在命令行上完成後。

在構建反對運行的LLVM樹頂部,使BUILD_EXAMPLES ='1'將構建LLVM特定示例,然後進入build/tools/clang路徑,然後再次運行make BUILD_EXAMPLES ='1'構建Clang示例。

因此:

LLVM頂部:

使BUILD_EXAMPLES = '1' //用於LLVM例子 CD工具/鐺 使BUILD_EXAMPLES = '1' //用於鏘具體例子

驗證在LLVM的/ usr/local/bin下安裝的示例,以及爲Clang安裝的/ usr/local/lib /下的示例。

如果您使用的CMake爲二進制的例子,默認位置是在/ usr /本地/例子

1

我也跟着在http://clang.llvm.org/get_started.html指令有兩個例外:

  1. 我的build目錄是源文件目錄(即CD LLVM; MKDIR版本)裏面,但我不認爲這是相關的。
  2. 我發出的cmake像這樣:

    CD打造

    cmake的-DLLVM_BUILD_EXAMPLES = 1 -DCLANG_BUILD_EXAMPLES = 1 ..

之後(當然編譯(使-j8) )我可以在構建目錄中找到示例:

find -iname '*printfunctionname*' 
./lib/PrintFunctionNames.so 
... 
+0

這對我來說確實有效。 – 2017-01-18 21:00:46