用于LLVM项目的示例CMakeLists.txt文件

Las*_*olt 20 c++ cmake llvm

我很难让LLVM参与一个新项目.我已经尝试了http://old.nabble.com/CMake-sample-project--td28871124.html中的多个CMakeLists.txt示例并且花了很多时间.

我可以完美地构建LLVM和示例,但我想要一个不在LLVM文件夹中的项目.我在Windows 7上使用Visual Studio 2010.现在我的设置是这样的:

root
  - CMakeLists.txt (1)
  main
    - CMakeLists.txt (2)
    - main.cpp (an exact copy of the Fibonacci example)
Run Code Online (Sandbox Code Playgroud)

(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)
Run Code Online (Sandbox Code Playgroud)

(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
)
Run Code Online (Sandbox Code Playgroud)

CMake工作正常并创建一个解决方案文件等但是当我编译项目时,我得到了许多未解决的外部和LLVMX86CodeGen.lib不匹配.我也得到了这个:

defaultlib'MSVCRT'与使用其他库冲突; 使用/ NODEFAULTLIB:库

问题可能与以下内容有关: - 我LLVMSystem从列表中删除了因为找不到它. - 我的编译库在/ lib/Release /而不是/ lib /,如示例所示.

任何有关上述问题的帮助都将是一个很大的帮助!:)

arr*_*owd 11

以下是您需要的所有信息:http://llvm.org/docs/CMake.html#embedding-llvm-in-your-project.

您正在观察此类问题,因为某些链接器无法按正确顺序自动链接静态库.为此,您需要利用llvm_map_components_to_libraries功能.


Las*_*olt 7

来自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})
Run Code Online (Sandbox Code Playgroud)

然后我只有一些问题与调试/释放lib for LLVMX86Utils(_ITERATOR_DEBUG_LEVEL).