我很难让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'与使用其他lib冲突;使用/ NODEFAULTLIB:库
问题可能与以下内容有关:
- 我从列表中删除了LLVMSystem
,因为找不到它。
- 我编译的库在/ lib / Release /而不是/ lib /,如示例所示。
对上述问题的任何帮助都将是一个很大的帮助! :)
答案 0 :(得分:8)
以下是您需要的所有信息:http://llvm.org/docs/CMake.html#embedding-llvm-in-your-project。
您正在观察此类问题,因为某些链接器无法按正确顺序自动链接静态库。为此,您需要使用llvm_map_components_to_libraries
函数。
答案 1 :(得分: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})
然后我对LLVMX86Utils
(_ITERATOR_DEBUG_LEVEL
)的调试/发布库只有一些问题。