2011-11-27 37 views
14

Tôi đang gặp khó khăn để LLVM hoạt động trên một dự án mới. Tôi đã thử nhiều ví dụ CMakeLists.txt từ http://old.nabble.com/CMake-sample-project--td28871124.html và đã sử dụng rất nhiều thời gian trên đó.Tệp CMakeLists.txt mẫu cho dự án LLVM

Tôi có thể xây dựng LLVM và các ví dụ một cách hoàn hảo nhưng tôi muốn một dự án không nằm trong thư mục LLVM. Tôi sử dụng Visual Studio 2010 trên Windows 7. Ngay bây giờ thiết lập của tôi là thế này:

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

(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) 

(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 hoạt động tốt và tạo một tệp giải pháp, v.v. nhưng khi tôi biên dịch dự án, tôi nhận được rất nhiều phần bên ngoài chưa được giải quyết và mismatc hes từ LLVMX86CodeGen.lib. Và tôi cũng nhận được điều này:

defaultlib 'MSVCRT' xung đột với việc sử dụng các lib khác; sử dụng/NODEFAULTLIB: thư viện

Sự cố có thể liên quan đến: - Tôi đã xóa LLVMSystem khỏi danh sách vì không tìm thấy. - libs đã biên soạn của tôi nằm trong/lib/Release/và không/lib/như là ví dụ hiển thị.

Bất kỳ trợ giúp nào về vấn đề trên sẽ là một trợ giúp tuyệt vời! :)

Trả lời

6

Câu trả lời từ mũi tên hướng dẫn tôi đúng cách :) Vì llvm_map_components_to_libraries không hoạt động như mong đợi, tôi phải làm theo cách thủ công để tìm đúng thứ tự phụ thuộc. Tôi đến với điều này:

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}) 

Và sau đó tôi chỉ có một số vấn đề với debug/release lib cho LLVMX86Utils (_ITERATOR_DEBUG_LEVEL).

6

Dưới đây là tất cả thông tin bạn cần: http://llvm.org/docs/CMake.html#embedding-llvm-in-your-project.

Bạn đang quan sát vấn đề như vậy vì một số trình liên kết không thể tự động liên kết các thư viện tĩnh theo thứ tự thích hợp. Đối với điều này, bạn cần sử dụng hàm llvm_map_components_to_libraries.

+0

Cảm ơn, tôi đã thử bao gồm mã đó. Nhưng tôi nhận được LLVMConfig không tìm thấy - nếu sao chép các tập tin hoặc viết đường dẫn đầy đủ đến LLVMConfig tôi phải nói '.cmake' và sau đó vấn đề là LLVMDips. Nếu tôi cũng sửa chữa đường dẫn đến tập tin đó, tôi nhận được 'Lỗi CMake tại chính/LLVMConfig.cmake: 127 (thư): Thư viện 'jit' không tìm thấy trong danh sách thư viện llvm.'. –

+0

Bạn không nên sao chép bất cứ điều gì, chỉ cần chạy 'cmake -DCMAKE_PREFIX_PATH =/path/to/llvm/share/llvm/cmake .'. Hmm, hoặc là nó CMAKE_MODULE_PATH ... không chắc chắn. BTW, tốt hơn là sử dụng đoạn mã thứ hai (sử dụng find_package()). – arrowd

+0

Tôi đã cố gắng thiết lập như mô tả và cũng trong các tập tin CMakeLists:/Tôi đã thử ở trên và cũng đã cố gắng bao gồm đường dẫn đến FindLLVM.cmake và LLVMConfig vv –

Các vấn đề liên quan