使用cmake和llvm

栏目: C · 发布时间: 6年前

内容简介:这里主要讨论使用clion写工程时使用llvm需要注意的东西。如果想在代码中使用设置环境变量

这里主要讨论使用clion写工程时使用llvm需要注意的东西。

编译llvm

如果想在代码中使用 llvm ,需要下载源码手动编译。方法是下载 llvm 的源代码,放到任何位置,然后在 llvm 的根目录下执行如下操作:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
 

设置环境变量 $LLVM_DIR :

export LLVM_DIR=/Users/seviezhou/llvm/build
 

头文件引用

为了能够正确的引用 llvm 的头文件,需要在 CMakeLists.txt 中添加:

cmake_minimum_required(VERSION 3.6)
project(kaleidoscope)
 
set(CMAKE_CXX_STANDARD 11)
 
# 使用llvm来设置路径
find_package(LLVM REQUIRED CONFIG)
 
# 打印信息
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
 
set(SOURCE_FILES top.cpp)
 
# 添加头文件包含路径
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
 
add_executable(kaleidoscope ${SOURCE_FILES})
 

如果在 clion 中, log 会输出:

/Applications/CLion.app/Contents/bin/cmake/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /Users/seviezhou/CLionProjects/kaleidoscope
-- include path: /Users/seviezhou/llvm/include;/Users/seviezhou/llvm/build/include
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/seviezhou/CLionProjects/kaleidoscope/cmake-build-debug
 

这时就能正确的包含 llvm 的所有头文件了。

使用llvm库

接下来如果使用了 llvm 库的代码,还需要在链接时加上库文件一起编译,否则有可能报如下的错误:

Undefined symbols for architecture x86_64
 

CMakeLists.txt 中需要添加用到的库,完整的 CMakeLists.txt 如下:

cmake_minimum_required(VERSION 3.6)
project(kaleidoscope)
 
set(CMAKE_CXX_STANDARD 11)
# 定义需要的库
set(LLVM_LINK_COMPONENTS
        Core
        Support
        )
 
# 使用llvm
find_package(LLVM REQUIRED CONFIG)
 
set(SOURCE_FILES top.cpp)
 
# 添加头文件路径
message(STATUS "include path: ${LLVM_INCLUDE_DIRS}")
include_directories(${LLVM_INCLUDE_DIRS})
 
add_executable(kaleidoscope ${SOURCE_FILES})
 
# 寻找对应的库
llvm_map_components_to_libnames(llvm_libs ${LLVM_LINK_COMPONENTS})
 
# 将库与目标代码一起链接
target_link_libraries(kaleidoscope ${llvm_libs})
 

也可以直接包含所有的库:

set(LLVM_LINK_COMPONENTS
        all
        )
 

rtti

rttirun-time type information ,在使用 C++ 的多态特性时需要 rtti 的支持,如果编译时报如下错误说明链接时少了支持 rtti 的参数:

Undefined symbols for architecture x86_64:
  "typeinfo for llvm::raw_ostream", referenced from:
 

CMakeLists.txt 中加一句话:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
 

就可以正确的编译链接。


以上所述就是小编给大家介绍的《使用cmake和llvm》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux内核设计的艺术

Linux内核设计的艺术

新设计团队 / 机械工业出版社华章公司 / 2011-6-20 / 79.00元

关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界顶尖级水平,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富。本书可能也代表着同类图书的顶尖水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系......一起来看看 《Linux内核设计的艺术》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具