cmake的使用
cmake
简介
cmake 是一个软件自动化构建工具,在使用C/C++ 编写程序的时候,多个源文件编译一般是通过makefile 工具进行编译生成。可以通过使用cmake 生成一个 makefile文件,再通过 makefile文件生成程序。
简而言之:cmake 用于生成 makefile文件,makefile 文件用于编译源文件生成程序。
在没有cmake 之前,makefile 也可以自己写。
但既然有了cmake,就没有必要再自己写makefile文件了(但对makefile文件仍然要有了解和认识)
CMakeLists.txt
CMakeLists.txt 文件是构建cmake 的核心,配置信息,加载源文件都在其中编写。
一般在文件中首先指定cmake的最低版本。
cmake_minimum_required(VERSION 2.8)
常见参数:
project(name)
定义项目名称add_executable(target_name file1.cc file2.cc )
指定要编译的源文件和生成的可执行文件add_library(target_name STATIC/SHARED file1.cc file2.cc)
生成库文件(静态/动态)find_package(package_name)
查找并使用一个外部库include_directories(dir1 dir2)
指定头文件的搜索路径target_link_libraries(target_name lib1 lib2)
指定链接时需要的库set(variable value)
设置一个变量
示例
比如,我当前有多个源文件,分别为:a.cc, b.cc, c.cc,那么我的CMakeLists.txt 就可以这样写
cmake_minimum_required(VERSION 2.8)
project(out) # 这里的out表示这个工程的名字,默认和变量 PROJECT_NAME 一致。
# 在这里定义project之后,就可以使用 PROJECT_NAME 这个变量。
add_executable(a.out a.cc b.cc c.cc) # 这里的a.out表示即将生成的可执行程序
可以通过set设置一些变量,在文件中使用 ${}
使用变量的值。
set(target_name "a.out")
add_executable(${target_name} a.cc b.cc c.cc)
动态库
主要谈谈动态库和静态库的使用和区别。静态库在linux下一般时 .a 结尾的库,如 libxx.a ,这个xx就是这个静态库的名字。动态库一般以 .so 结尾。如 libxxx.so ,这个xxx就是动态库的名字,这是linux下库的命名规范。静态库一般放在 lib 目录下,在使用的时候,通过 -l 链接静态库或动态库,链接方式都是一样的。
区别在于,静态库链接之后,静态库中的二进制内容就一起被打包成一个可执行文件,即使将静态库删除,也不会影响可执行文件的使用。
静态库则更类似于告诉可执行程序:你在执行的时候,去链接这个动态库。也就是说,之后的每次可执行程序执行,都会自动链接该动态库,这个动态库不能删除,如果删除,可执行程序中涉及到该库的内容就不能使用。
生成动态库和静态库的方式不同。在Cmake中可以直接通过设定
add_library(生成库名字 SHARED/STATIC xxx.cpp xxx.cpp)
# 生成库的名字是即将生成的动态库或静态库名字。
# SHARED表示动态库,shared。
# STATIC表示静态库,static
# xxx.cpp 表示源文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?