cmake

cmake

cmake 命令

  • 1.cmake_minimum_required(VERSION 3.2) 指定最低cmake版本git

  • 2.project(project_name) 指定项目的名称,通常和项目到文件夹对应github

  • 3.include_directories(include) 添加各种文件夹路径,以后源代码可直接引用这些路径下到头文件
  • 4.aux_source_directory(. src_list) 查找当前目录下全部到源文件并保存到src_list 变量中
  • 5.link_directories(./lib) 将./lib 加入编译器连接阶段到搜索目录列表
  • 6.add_executable(hello ${src_list}) 使用src_list源文件列表里到文件生成一个可执行文件 hello
  • 7.add_library(hello static ${src_list}) 使用src_list 源文件列表里到文件生成一个静态连接库libhello.a
  • 8.add_library(hello shared ${src_list}) 使用src_list 源文件列表里到文件生成一个动态连接库libhello.so
  • 9.target_link_libraries(hello a b.a c.so) 将若干文件连接到目标hello中,target_link_libraries 里到库文件到顺序符合连接顺序到规则,即被依赖到库放在依赖它到库后面 即最独立到文件放在最后
    其中target必须在当前目录中被add_executable() 命令或是add_library()命令建立出来
  • 10.find_path(var name1 [path1 path2 path3]) 该命令在path1,path2...指定到目录中查找文件name1并将查找路径保存到变量var中
  • 11.find_library() 相似于find_path 用于查找连接库并将结果保存在变量中
  • 12.set(THE_KEY "a" CACHE PATH "the key") 设置一个变量。把a赋值给THE_KEY。cache是说这个变量缓存的位置。
  • 13.add_definitions(-DKEY_WORD=${THE_KEY}) 给cpp文件中添加#define 定义
有可能要用到一些函数库,这些函数库在不一样到系统中安装到位置可能不一样,编译时须要首先找到这些头文件以及连接库所在到目录以便生成编译选项
  • 12.set_target_properties(hello_static properties output_name "hello") 默认规则不能有相同名字的动态库和静态库。因此当生成静态库到时候,动态库会被删除,由于只能容许一个存在。因此首先将静态库先命名为hello_static,而后再修改输出名字。
  • 13.add_subdirectory 去执行别的目录下到cmakelists

关键词

project_binary_dir(cmake_binary_dir)        路径/build
project_source_dir(cmake_source_dir)        路径/src

系统信息web

1,CMAKE_MAJOR_VERSION,CMAKE 主版本号,好比 2.4.6 中的 2
2,CMAKE_MINOR_VERSION,CMAKE 次版本号,好比 2.4.6 中的 4
3,CMAKE_PATCH_VERSION,CMAKE 补丁等级,好比 2.4.6 中的 6
4,CMAKE_SYSTEM,系统名称,好比 Linux-2.6.22
5,CMAKE_SYSTEM_NAME,不包含版本的系统名,好比 Linux
6,CMAKE_SYSTEM_VERSION,系统版本,好比 2.6.22
7,CMAKE_SYSTEM_PROCESSOR,处理器名称,好比 i686.
8,UNIX,在全部的类 UNIX 平台为 TRUE,包括 OS X 和 cygwin
9,WIN32,在全部的 win32 平台为 TRUE,包括 cygwin

小型程序CMakeLists.txt 模板:

cmake_minimum_required(version 3.2)
project(example)
include_directories("/usr/include")  //程序头文件的位置
link_directories("/usr/lib")    //程序库文件的位置
add_executable(example example.cpp) //编译example.cpp 生成 example 对象文件
target_link_libraries(example gsl) //连接lib库文件到example 对象文件

静态库与动态库

  • 1.静态库
    在连接阶段,会将汇编生成到目标文件与引用到到库一块儿连接打包到可执行文件中。所以对应到连接方式称为静态连接。
    静态库对函数库到连接时放在编译时期完成到。
    程序在运行时与函数毫无瓜葛,移植方便。
    浪费空间和资源,全部相关到目标文件与牵涉到的函数库被连接合成一个可执行文件。
    过程:
    1、将代码文件编译为目标文件 file.o
    2、经过工具将目标文件打包成 .a静态库文件
    3、生成file.a
  • 2.动态库
    针对于静态库到问题:空间浪费、静态库对程序到更新等会带来麻烦
    动态库在程序编译时并不会被链接到目标代码到中,而是在程序运行时才被载入。不一样到应用程序若是调用相同到库,那么,在内存里只有一份实例,避免空间浪费。用户可增量跟新动态库。
    过程:
    1、生成目标文件
    2、生成动态库
相关文章
相关标签/搜索