2012-07-24 64 views
1

我正在努力,雖然http://llvm.org/docs/WritingAnLLVMPass.html,試圖寫一個非常簡單的通行證。 (假設我使用'Joe'而不是'hello',因爲在相關目錄中已經有'hello')寫LLVM通過 - 失敗

我創建了目錄'joe',我應該在那裏創建建議的cpp文件'joe'(雖然我注意到沒有附近的目錄裏有任何cpp文件),我把它命名爲'joe.cpp',因爲我不相信我有不同的被告知......

我達到它說,在文檔的一部分「編譯在本地目錄中一個簡單的‘使用gmake’命令文件」,但我得到的錯誤

化妝:***沒有規則,使目標 /Users/joXXXXX/llvm/llvm/lib/Transforms/joe/Makefile', needed by Makefile'。停止。

這是完全混淆。我注意到與this case的相似性,但是在那種情況下運行../config然後在根目錄中解決了問題。在我的任務中,這需要20分鐘,然後什麼都沒有改變......任何人都可以告訴我發生了什麼,或者給我一些成功的樣子?

編輯 - 本地生成文件看起來是這樣的:

# Makefile for hello pass 
# 
# # Path to top level of LLVM hierarchy 
LEVEL = ../../.. 
# 
# # Name of the library to build 
LIBRARYNAME = joe 
# 
# # Make the shared library become a loadable module so the tools can 
# # dlopen/dlsym on the resulting library. 
# LOADABLE_MODULE = 1 
BUILD_ARCHIVE = 1 
# # Include the makefile implementation stuff 
include $(LEVEL)/Makefile.common 
+0

你有像Makefile這樣的指令:... '在你的Makefile中。這就是錯誤信息所說的。 – 2012-07-24 23:21:23

+0

編輯爲makefile提供全部內容:) – Joe 2012-07-24 23:42:36

回答

2

所以,事實證明,在幫助文件中說: 'LIB /變換/你好' 這意味着 'somestuff/LLVM/lib中/變換/你好' 而不是'/somestuff /編譯/ lib中/變換/你好」。事後看來,這不是不透明的,但我想離開這個答案來幫助其他人可能已經錯過了這個文檔...

+2

同樣供以後參考:你可以使用一個單獨的編譯目錄,但是你必須進入/lib/Transform目錄,爲你的pass創建一個子目錄,並複製你的'Makefile'在那裏。然後,如果在同一個目錄中執行'make',它將從源樹中的正常位置拾取源。另外,你的pass('Makefile')中的'LIBRARYNAME'必須以「LLVM」開頭,比如「LLVMFooPass」。否則鏈接器會忽略它,你不會得到'.so'文件。 – 2014-01-21 08:32:26

+0

@Bryon你確定嗎?有人曾經說過,圖書館名稱必須以「LLVM」開頭。 – zell 2015-04-13 03:16:30

5

我面臨同樣的問題,並通過解決這個問題 - 閱讀教程:

首先,配置並構建LLVM。這需要直接在LLVM源代碼樹內完成,而不是在單獨的對象目錄中完成。

這意味着您不應該按照LLVM入門中的建議創建「構建」文件夾。假設你在$LLVM下載的LLVM源,這裏是名單,我把它的工作原理:

  • 了一通,如創建一個新的文件夾,讓創建MyHello說,在$ LLVM/lib中/變換/和必要的文件教程。

  • $ CD $ LLVM

  • $。/配置

  • $使

  • $ CD的lib /變換/創建MyHello

  • $使