Пример файла CMakeLists.txt для проекта LLVM

Мне тяжело заставить LLVM работать над новым проектом. Я попробовал несколько примеров CMakeLists.txt с http://old.nabble.com/CMake-sample-project--td28871124.html и потратил на это много времени.

Я могу построить LLVM и примеры отлично, но я хочу проект, который не находится в папке LLVM. Я использую Visual Studio 2010 на Windows 7. Прямо сейчас мои настройки таковы:

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 работает нормально и создает файл решения и т. д., но когда я компилирую проект, я получаю много неразрешенных внешних проблем и несоответствий из LLVMX86CodeGen.lib. И я также получаю это:

defaultlib 'MSVCRT' конфликтует с использованием других библиотек; использовать /NODEFAULTLIB: библиотека

Проблема может иметь отношение к: - Я удалил LLVMSystem из списка, потому что он не был найден. - Мои скомпилированные библиотеки находятся в /lib/Release/, а не / lib /, как показывают примеры.

Любая помощь с вышеупомянутой проблемой была бы большой помощью!:)

2 ответа

Решение

Ответ от arrowdodger приведет меня на правильный путь:) Потому что 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})

И тогда у меня были только некоторые проблемы с отладкой / выпуском lib для LLVMX86Utils (_ITERATOR_DEBUG_LEVEL).

Вот вся необходимая информация: http://llvm.org/docs/CMake.html.

Вы наблюдаете такую ​​проблему, потому что некоторые компоновщики не могут автоматически связывать статические библиотеки в правильном порядке. Для этого вам нужно использовать llvm_map_components_to_libraries функция.

Другие вопросы по тегам