2011-11-27 9 views
14

Mam trudności z uruchomieniem LLVM nad nowym projektem. Próbowałem wielu przykładów CMakeLists.txt z http://old.nabble.com/CMake-sample-project--td28871124.html i użyłem dużo czasu na to.Przykładowy plik CMakeLists.txt dla projektu LLVM

Mogę zbudować LLVM i przykłady doskonale, ale chcę projektu, który nie jest w folderze LLVM. Używam Visual Studio 2010 na Windows 7. Teraz moja konfiguracja jest taka:

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 działa poprawnie i tworzy plik rozwiązania itp., ale kiedy skompiluję projekt, otrzymuję wiele nierozwiązanych zewnętrznych i mismatc z pliku LLVMX86CodeGen.lib. Dostaję również:

defaultlib "MSVCRT" powoduje konflikty z użyciem innych bibliotek; Zastosowanie/NODEFAULTLIB: biblioteka

Problem może mieć coś wspólnego z: - usunąłem LLVMSystem z listy, ponieważ nie został znaleziony. - Moje skompilowane biblioteki znajdują się w/lib/Release/i nie/lib /, jak pokazują przykłady.

Każda pomoc w powyższym problemie byłaby bardzo pomocna! :)

Odpowiedz

6

Odpowiedź od Arrowdodger prowadzić mnie we właściwy sposób :) Ponieważ llvm_map_components_to_libraries nie działa zgodnie z oczekiwaniami, musiałem zrobić to, co robi ręcznie, co jest znalezienie właściwej kolejności zależności. Wpadłem na to:

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

A potem miałem tylko pewne problemy z debug/release lib dla LLVMX86Utils (_ITERATOR_DEBUG_LEVEL).

6

Oto wszystkie informacje, których potrzebujesz: http://llvm.org/docs/CMake.html#embedding-llvm-in-your-project.

Obserwujesz taki problem, ponieważ niektóre łączniki nie mogą automatycznie łączyć bibliotek statycznych we właściwej kolejności. W tym celu należy użyć funkcji llvm_map_components_to_libraries.

+0

Dzięki, próbowałem dołączyć ten kod. Ale nie znaleziono LLVMConfig - jeśli skopiuję plik lub zapisuję pełną ścieżkę do LLVMConfig, muszę powiedzieć '.cmake', a następnie problem to LLVMDips. Jeśli również naprawię ścieżkę do tego pliku, otrzymam komunikat "CMake Error at main/LLVMConfig.cmake: 127 (message): biblioteka 'jit' nie została znaleziona na liście bibliotek llvm." –

+0

Nie powinieneś kopiować niczego, po prostu uruchom 'cmake -DCMAKE_PREFIX_PATH =/path/to/llvm/share/llvm/cmake.". Hmm, czy to było CMAKE_MODULE_PATH ... nie jestem pewien. BTW, lepiej użyć drugiego fragmentu kodu (który używa find_package()). – arrowd

+0

Próbowałem ustawić zgodnie z opisem, a także w plikach CMakeLists:/Próbowałem powyższe, a także próbował włączyć ścieżkę do FindLLVM.cmake i LLVMConfig itp. –

Powiązane problemy