2011-11-27 105 views
14

我很难让LLVM在新项目上工作。我已经尝试了多个来自http://old.nabble.com/CMake-sample-project--td28871124.html的CMakeLists.txt示例,并使用了很多时间。LLVM项目的示例CMakeLists.txt文件

我可以完美地构建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工作正常并创建一个解决方案文件等,但是当我编译该项目时,我得到了很多未解决的外部和不匹配hes来自LLVMX86CodeGen.lib。我也得到这个:

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

的问题可能有一些做: - 我删除LLVMSystem从列表中,因为它没有被发现。 - 我的编译库位于/ lib/Release /和not/lib /中,如示例所示。

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

回答

6

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

6

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

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

+0

谢谢,我试过包含该代码。但是我找不到LLVMConfig - 如果复制文件或将完整路径写入LLVMConfig,我必须说'.cmake',然后问题是LLVMDips。如果我还修复了该文件的路径,我在main/LLVMConfig.cmake处得到'CMake Error:127(message):Library'jit'在llvm库列表中找不到.'。 –

+0

您不应该复制任何内容,只需运行'cmake -DCMAKE_PREFIX_PATH =/path/to/llvm/share/llvm/cmake .'。嗯,还是CMAKE_MODULE_PATH ...不确定。顺便说一句,最好使用第二个代码片段(它使用find_package())。 – arrowd

+0

我试图设置描述,并在CMakeLists文件中:/我已经尝试了上述,并试图包括路径FindLLVM.cmake和LLVMConfig等。 –