【问题标题】:Sample CMakeLists.txt file for LLVM projectLLVM 项目的示例 CMakeLists.txt 文件
【发布时间】:2011-11-27 15:49:04
【问题描述】:

我很难让 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)

(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:library

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

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

【问题讨论】:

    标签: c++ cmake llvm


    【解决方案1】:

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

    您正在观察此类问题,因为某些链接器无法以正确的顺序自动链接静态库。为此,您需要使用llvm_map_components_to_libraries 函数。

    【讨论】:

    • 谢谢,我已经尝试了包含该代码。但是我找不到 LLVMConfig - 如果复制文件或将完整路径写入 LLVMConfig,我不得不说.cmake,然后问题是 LLVMDips。如果我还修复了该文件的路径,我会得到CMake Error at main/LLVMConfig.cmake:127 (message): Library 'jit' not found in list of llvm libraries.
    • 你不应该复制任何东西,只要运行cmake -DCMAKE_PREFIX_PATH=/path/to/llvm/share/llvm/cmake .。嗯,或者是 CMAKE_MODULE_PATH ......不确定。顺便说一句,最好使用第二个代码 sn-p(它使用 find_package())。
    • 我已经尝试按照描述以及在 CMakeLists 文件中进行设置:/ 我已经尝试了上述方法,还尝试包含 FindLLVM.cmake 和 LLVMConfig 等的路径。
    • 您是否使用 CMake 构建了 LLVM?你是安装了它,还是刚刚建造了它?您应该将 CMake 指向安装 LLVM 的位置。
    • 我遵循了这个指南:llvm.org/docs/GettingStartedVS.html。在 LLVM 解决方案中运行 INSTALL 和 Fibonacci。两者都很顺利。
    【解决方案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})
    

    然后我只在LLVMX86Utils (_ITERATOR_DEBUG_LEVEL) 的调试/发布库方面遇到了一些问题。

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 2022-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      相关资源
      最近更新 更多