2011-11-27 7 views
14

新しいプロジェクトでLLVMを使用するのは難しいです。私はhttp://old.nabble.com/CMake-sample-project--td28871124.htmlから複数のCMakeLists.txtの例を試して、それに多くの時間を費やしました。LLVMプロジェクトのサンプルCMakeLists.txtファイル

私はLLVMとその例を完全に構築できますが、私はLLVMフォルダ内にないプロジェクトが必要です。私は私のセットアップはこれです今のWindows 7上のVisual Studio 2010を使用します(1)

cmake_minimum_required(VERSION 2.6) 
project (TestLLVM) 

set(LLVM_SRC_DIR "MY FOLDER/llvm-2.9" CACHE PATH "Directory LLVM source (includes) are in") 
set(LLVM_BIN_DIR "MY FOLDER/llvm-2.9-install" CACHE PATH "Directory LLVM binaries (libraries) are in") 

set (CMAKE_BUILD_TYPE Debug) 

add_definitions (-D_DEBUG) 

link_directories(${LLVM_BIN_DIR}/lib/Release) 
include_directories(${LLVM_SRC_DIR}/include ${LLVM_BIN_DIR}/include) 

add_subdirectory (main) 

root 
    - CMakeLists.txt (1) 
    main 
    - CMakeLists.txt (2) 
    - main.cpp (an exact copy of the Fibonacci example) 

(2)

if(NOT WIN32 OR MSYS OR CYGWIN) 
    set (PLATFORM_LIBS dl boost_system) 
endif() 

add_executable (main main.cpp) 
target_link_libraries (main 

    ${PLATFORM_LIBS} 

    LLVMX86Disassembler 
    LLVMX86AsmParser 
    LLVMX86AsmPrinter 
    LLVMX86CodeGen 

    LLVMSelectionDAG 

    LLVMAsmPrinter 
    LLVMMCParser 
    LLVMX86Info 

    LLVMJIT 
    LLVMExecutionEngine 

    LLVMCodeGen 
    LLVMScalarOpts 
    LLVMTransformUtils 

    LLVMipa 
    LLVMAnalysis 
    LLVMTarget 
    LLVMMC 

    LLVMCore 
    LLVMSupport 
) 

正常に動作しますCMakeソリューションファイルなどを作成しますが、私がプロジェクトをコンパイルすると、未解決の外見やミスマッチがたくさんありますLLVMX86CodeGen.libからのhes。また、私はこれを取得します:

defaultlib 'MSVCRT'は他のライブラリの使用と競合します。使用/ NODEFAULTLIB:ライブラリ

問題がに何か持っていることがあります。 を - それが見つからなかったので、私はリストからLLVMSystemを削除しました。 - 私のコンパイル済みのlibsは/ lib/Release /にあり、例では/ lib /にはありません。

上記の問題の助けを借りれば、大きな助けになります。 :)

答えて

6

llvm_map_components_to_librariesが期待どおりに動作しなかったので、私はそれを手動で行う必要がありました。これは依存関係の正しい順序を見つけることでした。私はこの思い付いた:

set (LIBS 
    ${LLVM_LIBRARIES_PATH}/LLVMSupport.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMCore.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMMC.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMTarget.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMAnalysis.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMipa.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMTransformUtils.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMInstCombine.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMScalarOpts.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMCodeGen.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMExecutionEngine.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMJIT.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMX86Utils.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMX86Info.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMMCParser.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMX86AsmParser.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMX86AsmPrinter.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMAsmPrinter.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMSelectionDAG.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMX86CodeGen.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMX86Disassembler.lib 
    ${LLVM_LIBRARIES_PATH}/LLVMInterpreter.lib  
) 

target_link_libraries(main ${LIBS}) 

そして私はLLVMX86Utils_ITERATOR_DEBUG_LEVEL)のデバッグ/リリースlibにいくつかの問題がありました。

6

ここに必要な情報はすべてhttp://llvm.org/docs/CMake.html#embedding-llvm-in-your-projectです。

一部のリンカーは静的ライブラリを適切な順序で自動的にリンクできないため、このような問題が発生しています。このためには、llvm_map_components_to_libraries関数を利用する必要があります。

+0

ありがとう、私はそのコードをインクルードしようとしました。しかし、私はLLVMConfigが見つかりません - ファイルをコピーするか、LLVMConfigへの完全なパスを書く場合、私は '.cmake'と言う必要があり、問題はLLVMDipsです。もし私がそのファイルへのパスも修正したら、main/LLVMConfig.cmakeで 'CMake Error:127(message):ライブラリ 'jit'がllvmライブラリのリストに見つかりません。 –

+0

何もコピーしないでください。 'cmake -DCMAKE_PREFIX_PATH =/path/to/llvm/share/llvm/cmake'を実行するだけです。うーん、それともCMAKE_MODULE_PATHだったのかわからない。ところで、2番目のコードスニペット(find_package()を使用)を使用する方が良いです。 – arrowd

+0

私は上記のようにCMakeListsファイルに設定しようとしました:/私は上記を試して、FindLLVM.cmakeやLLVMConfigなどへのパスも含めようとしました。 –

関連する問題