【Tools】CMake 在 Linux C/C++ 编程中的极速入门

极简原理

一般来说,一个 C/C++ 工程可以被编译为三种目标结果:静态库、动态库、可执行程序

无论要编译的工程是一个静态库、动态库还是可执行程序,一般来说,需要四大输入:头文件目录、源码、链接库目录、链接库名称

所以,CMakeLists.txt 的主要内容就是写好所需的目标结果、以及为了目标结果的输入

极简语法

shell 中的语法
  • CMakeLists.txt 是编译时的输入文件,即,在 shell 环境中输入 cmake <dir> 例如 cmake . 时,dir 目录 (例如当前目录)中必须有 CMakeLists.txt 文件。
  • CMakeLists.txt 所在的目录输入 cmake . 即可把该 CMakeLists.txt 中定义的内容通过 cmake 编译成对应的 Makefile 文件以便继续 make、make install。
  • 使用 cmake . -Bbuild -DCMAKE_BUILD_TYPE=Debug 可以编译工程的可调式版本。-D<KEY>=<VALUE> 可以给相应的CMake源码中的参数 KEY 赋值 VALUE-B 表示把构建中间文件及结果文件放到后面的目录文件夹 ./build 中,如果不存在该文件夹,则创建该文件夹。
  • 也可以直接在包含 CMakeLists.txt 的目录中创建 build 文件夹,然后在 build 文件夹中执行 cmake .. -DCMAKE_BUILD_TYPE=Debug
CMake 源码中的语法
  • CMake 源码中不区分大小写,但一般把语句用小写,变量用大写。
  • CMake 中有些保留语句(方法)以及保留关键词(变量),常见的语句及变量会在接下来谈及。
  • cmake_minimum_required(VERSION x.x.x) 作为 CMakeLists.txt 第一行内容,规定了 CMake 的最低版本,因为有些 CMake 语句是在较高的版本上才有的(比如 target_link_libraries 在最低 3.13.0 以上才有),所以,这一句可以避免因 CMake 版本不够而导致的编译报错。
  • project(example) 用于定义该项目的名称。保留变量 PROJECT_NAME 将会被赋值为 “example”。
  • include_directories(path1 path2 path3) 是把 path1 path2 path3 告诉编译器去这些路径中找头文件。
  • link_directories(lpath1 ... lpathn) 是告诉链接器去这些目录下找被链接的库。
  • link_libraries(-lavfilter -ogg -lz) 是告诉链接器需要链接 avfilter ogg z 这三个库。
  • add_library(example STATIC a.cpp b.cpp c.cpp) 是把 a.cpp b.cpp c.cpp 这三个源码文件编译成静态库 libexample.a。把 STATIC 换成 SHARED 即可编译出动态库 libexample.so。去掉 STATICSHAREDlibrary 换成 executable 则编译出可执行文件 example
  • 使用 ${PROJECT_NAME} 可以使用变量的值,例如 add_executable(${PROJECT_NAME} a.cpp b.cpp c.cpp) 等价于 add_executable(example a.cpp b.cpp c.cpp)

示例代码

cmake_minimum_required(VERSION 3.0.0)
project(example)
include_directories(/usr/include /usr/local/include  ./include)
link_directories(/usr/lib /usr/local/lib /home/myname/installedprogram/lib/)
link_libraries(-lz -logg -lavfilter)
add_executable(${PROJECT_NAME} src/a.cpp src/b.cpp src/c.cpp src/main.cpp)
add_library(example STATIC src/a.cpp src/b.cpp src/c.cpp)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海Enoch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值