两种方式 进行cmake
mkdir build
cd build
cmake ..
make
cmake -S . -B build -s代表目前在哪个路径下,makefile放到build文件夹下(自动创建)
cmake --build build 到build文件夹中执行build
cmake 一般干啥
一般就两种,要不生成可执行文件,要不生成库文件(动态库,静态库)
动态库和静态库的概念
静态库
静态库编进去二进制的源码,类似于.o,静态链接就是把代码复制进去。一般开源的不允许静态,因为静态链接就看不到引用其他的了。链接时间比较长(每次用的时候,都要相应的代码复制进去),文件较大。
静态库需要头文件
比如叫xlog
windows:xlog.lib 后缀名为lib
windows 静态库还需要区分debug和release版本,debug编进去二进制的源码,release编进去原版的源码
linux,macos:libxlog.a 后缀名为a 前面自动加上lib
动态库
windows 生成 xlog.lib(区分于上面,只是放了函数的索引) xlog.ddl
编译时只是复制过去地址就ok,运行的时候再去找函数
加载动态库,内存只需要加载一个即可,节省了很多空间
linux,android:
macos:
libxlog.dylib
cmake 基本语法
基础1(生成可执行文件)
# CMakeLists.txt cmake文件名大小写不敏感
#指定cmake最低版本
cmake_minimum_required(VERSION 3.20)
#构建项目的名称
project(first_cmake)
#构建执行程序
add_executable(first_cmake 101first_cmake.cpp)
基础2(生成静态库)
#CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(xlog)
add_library(xlog STATIC xlog.cpp xlog.h)
基础3(链接一个静态库)
链接基础二生成的静态库 libxlog.a
#CMakeLists.txt test_xlog 102
cmake_minimum_required(VERSION 3.20)
project(test_xlog)
#指定头文件查找路径
include_directories("../xlog")
# 指定库查找路径 window自动找 ../xlog/build/Debug ../xlog/build/Release
link_directories("../xlog/build")
add_executable(test_xlog test_xlog.cpp)
# 指定加载的库
target_link_libraries(test_xlog xlog)# 需要放到可执行文件后面 相当于属性
基础4(生成动态库并链接动态库)
#CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(xlog)
add_library(xlog SHARED xlog.cpp xlog.h)
include_directories(./xlog)
link_directories(./xlog/build)
add_executable(test_xlog ./test_xlog/test_xlog.cpp)
target_link_libraries(test_xlog xlog)# 相当于加入一个属性