编写CMakeLists.txt
 
#在当前目录新建一个build目录,然后cd build;cmake ..
#这样的好处是,可以将cmake生成的内容,和源码文件分离
 
#设置编译结果发布路径
  1. set( CMAKE_INSTALL_PREFIX ./_install)
#配置一个头文件,可以让一些cmake设置传到源码里,比如可以传版本号,传宏定义等等
  1. configure_file (
  2. "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  3. "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  4. )
#将可执行文件与其源码关联起来
  1. add_executable(Tutorial tutorial.c)
#如果是很多源码,可以写一个变量,先把源码文件收集起来,比如下面这样,
  1. set(SRC_FILES avl.c rb.c splay.c)
  2. add_executable(Tutorial ${SRC_FILES})
#增加库文件
  1. add_library(MathFunctions mysqrt.cxx)
#增加动态库,SRC_TREE_FILES是实现定义好的源码文件列表
  1. add_library(tree SHARED ${SRC_TREE_FILES})
#增加静态库
  1. add_library(tree_static STATIC ${SRC_TREE_FILES})
#将库文件和可执行文件链接起来
  1. target_link_libraries (Tutorial MathFunctions)
#如何连接系统库,但是必须在add_executable之前加才有效
  1. LINK_LIBRARIES(-lpthread -lm)
#验证系统是否提供某些函数
# does this system provide the log and exp functions?
  1. include (CheckFunctionExists)
  2. check_function_exists (log HAVE_LOG)
  3. check_function_exists (exp HAVE_EXP)
#也还需要在配置文件TutorialConfig.h中增加,这样源码中就能用这个宏定义来确定函数是否支持
  1. #cmakedefine HAVE_LOG
  2. #cmakedefine HAVE_EXP
#可以增加头文件搜索路径
  1. include_directories ("${PROJECT_BINARY_DIR}")
#或者为某一个目标添加
  1. target_include_directories(os_demo
  2. PRIVATE
  3. ${CMAKE_SOURCE_DIR}
  4. ${CMAKE_SOURCE_DIR}/inc
  5. )
#如何添加编译选项; 设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS
  1. SET(CMAKE_C_FLAGS "-O3 -ffast-math -Wall -std=gnu99 -fPIC")
#疑问?
${CMAKE_CURRENT_BINARY_DIR},${PROJECT_SOURCE_DIR},${PROJECT_BINARY_DIR}在哪定义的
#通过打印显示;CMAKE_CURRENT_BINARY_DIR,PROJECT_BINARY_DIR是当前目录,PROJECT_SOURCE_DIR是CMakeLists.txt所在目录。
  1. -- This is the engine CMAKE_CURRENT_BINARY_DIR: /home/xxxx/engine/build.tx1
  2. -- This is the engine PROJECT_SOURCE_DIR: /home/xxxx/engine
  3. -- This is the engine PROJECT_BINARY_DIR: /home/xxxx/build.tx1
#如何方便的进行交叉编译?一般要用到CMAKE_TOOLCHAIN_FILE
  1. cmake .. -DCMAKE_TOOLCHAIN_FILE=../tx1.toolchain.cmake
#下面是一个简单的toolchain.cmake例子
  1. # this is required
  2. SET(CMAKE_SYSTEM_NAME Linux)
  3.  
  4. # specify the cross compiler
  5. SET(CMAKE_C_COMPILER /opt/nvidia/gcc-linaro-5.3.-2016.05-x86_64_aarch64-linux-gnu//bin/aarch64-linux-gnu-gcc)
  6. SET(CMAKE_CXX_COMPILER /opt/nvidia/gcc-linaro-5.3.-2016.05-x86_64_aarch64-linux-gnu//bin/aarch64-linux-gnu-g++)
  7.  
  8. # where is the target environment
  9. SET(CMAKE_FIND_ROOT_PATH /opt/nvidia/gcc-linaro-5.3.-2016.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/5.3.)
  10.  
  11. # search for programs in the build host directories (not necessary)
  12. SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  13. # for libraries and headers in the target directories
  14. SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  15. SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  16.  

Cmake 学习笔记的更多相关文章

  1. cmake学习笔记(五)

    在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...

  2. cmake 学习笔记(三)

    转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...

  3. cmake 学习笔记(二)

    在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...

  4. cmake 学习笔记(三) (转)

    接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...

  5. CMake学习笔记四:usb_cam的CMakeLists解析

    最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...

  6. cmake 学习笔记(六)

    希望这是现阶段阻碍阅读shiboken和PySide源码的涉及cmake的最后一个障碍 ^ _^ 学习 cmake 的单元测试部分 ctest. 简单使用 最简单的使用ctest的方法,就是在 CMa ...

  7. cmake 学习笔记(四)

    接前面的一二三,学习一下 CMakeCache.txt 相关的东西. CMakeCache.txt 可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数). ...

  8. cmake 学习笔记(一)

    最大的Qt4程序群(KDE4)采用cmake作为构建系统 Qt4的python绑定(pyside)采用了cmake作为构建系统 开源的图像处理库 opencv 采用cmake 作为构建系统 ... 看 ...

  9. cmake学习笔记之add_library、target_link_libraries和link_directories

    cmake是Linux(这里默认是Ubuntu系统)下常使用的编译C++的工具,而使用cmake就需要先在CmakeLists.txt文件中对编译规则进行.这里介绍常用的三种指令add_library ...

  10. CMake学习笔记

    C++开发者必备技能CMake  先简单介绍一下,CMake是一个跨平台的编译工具,它可以根据不用的平台,不同的编译环境,生成不同的MakeFile,从而控制编译的过程. 使用CMake的步骤: 1. ...

随机推荐

  1. EasyUI集成Kindeditor使用

    在实际的项目中,我们需要在项目中集成富文本编辑器,而kindeditor作为一款优良的编辑器,在项目中或多或少都会用到! 实际效果图     使用方法: 1.首先下载Kindeditor编辑器,我这里 ...

  2. SSM-MyBatis-07:Mybatis中SqlSession的insert和delete底层到底做了什么

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 先点进去看一下insert方法 用ctrl加鼠标左键点进去看 发现是一个接口SqlSession的方法,没有实 ...

  3. Web前端原生JavaScript浅谈轮播图

    1.一直来说轮播图都是困扰刚进业内小白的一大难点,因为我们不仅需要自己作出一个比较完美的运动框架(虽然网上一抓一大把,但是哪有比自己做出来实现的有成就感,不是吗?^_^),还必须需要非常关键性的把握住 ...

  4. OAuth 2 Developers Guide

    Introduction This is the user guide for the support for OAuth 2.0. For OAuth 1.0, everything is diff ...

  5. 微机原理基础(五)—— MSP430

    一.MSP430组成 1.结构简图 2.具体组成框图

  6. Spark2.1.0——Spark初体验

    学习一个工具的最好途径,就是使用它.这就好比<极品飞车>玩得好的同学,未必真的会开车,要学习车的驾驶技能,就必须用手触摸方向盘.用脚感受刹车与油门的力道.在IT领域,在深入了解一个系统的原 ...

  7. JavaScript Math 对象的常用方法

    JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. 使用 Math 的属性和方法的语法: var pi_value=Math.PI; var sqrt_value= ...

  8. 17.app后端如何保证通讯安全--aes对称加密

    在上文<16.app后端如何保证通讯安全--url签名>提到,url签名有两个缺点,这两个缺点,如果使用对称加密方法的话,则完全可以避免这两个缺点.在本文中,会介绍对称加密的具体原理,和详 ...

  9. req_params.go

    , fmt.Sprintf("%s: closing %s", proto, listener.Addr())) }

  10. bzoj 2510 弱题 矩阵乘

    看题就像矩阵乘 但是1000的数据无从下手 打表发现每一行的数都是一样的,只不过是错位的,好像叫什么循环矩阵 于是都可以转化为一行的,O(n3)->O(n2)*logk #include< ...