cmake学习笔记

一、什么是cmake?

cmake是一个跨平台项目构建工具。Linux下有makefile,windows下有.sln .vcxproj。

1.工作流程

编写CMakeLists.txt组织项目源码 --> 执行cmake --> 生成makefile或者.sln .vcxproj --> make或者点击.sln .vcxproj

2.编写CMakeLists.txt

例子1

# 单行注释    #[[]] 多行注释

#指定最低版本
cmake_minimum_required(VERSION 3.20)  

#指定项目名字
project(v1) 

#指定源文件的变量名为SRC
set(SRC add.cpp main.cpp)

# 打印信息
message(${PROJECT_BINARY_DIR})

#指定可执行程序输出路径    
# $(PROJECT_BINARY_DIR)指执行cmake命令时,所在的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

#添加可执行程序 v1 当前文件夹下的依赖文件add.cpp main.cpp
add_executable(v1 ${SRC})


在当前文件夹下创建build目录,进入build目录后生成Makefile文件

mkdir build
cd build
cmake ..

例子2

#[[
当前目录下有 build include src文件夹
以下是CMakeLists.txt内容
]]


#指定最低版本
cmake_minimum_required(VERSION 3.20)  

#指定项目名字
project(v2) 

# 打印信息 CMakeLists.txt所在路径
message(${CMAKE_CURRENT_SOURCE_DIR})

#将${CMAKE_CURRENT_SOURCE_DIR}/src下所有源文件用SRC代替 
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)

#指定头文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

#指定可执行程序输出路径    
# $(PROJECT_BINARY_DIR)指执行cmake命令时,所在的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

add_executable(v2 ${SRC})

例子3:生成静态库

#指定最低版本
cmake_minimum_required(VERSION 3.20)  

#指定项目名字
project(v2) 

#将${CMAKE_CURRENT_SOURCE_DIR}/src下所有源文件用SRC代替 
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)

#指定头文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

#生成静态库aa
add_library(aa STATIC ${SRC})


#静态库生成路径
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)

#指定链接目录
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)

#指定链接静态库
link_libraries(aa)

#生成可执行程序v2
add_executable(v2 main.c)

例子4:生成动态库

#指定最低版本
cmake_minimum_required(VERSION 3.20)  

#指定项目名字
project(v2) 

#将${CMAKE_CURRENT_SOURCE_DIR}/src下所有源文件用SRC代替 
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)

#指定头文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

#生成动态库bb
add_library(bb SHARED ${SRC})

#动态库生成路径
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)

#指定链接目录
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)

#生成可执行程序v2
add_executable(v2 main.c)

#指定链接动态库,链接动态库需要放到add_executable()语句下面
target_link_libraries(v2 bb)

例子5:嵌套CMake

需要将共同用到的资源写在根目录下的CMakeLists.txt,并在该CMakeLists.txt下添加子目录。

#指定最低版本
cmake_minimum_required(VERSION 3.20)  

#指定项目名字
project(v2) 

#将${CMAKE_CURRENT_SOURCE_DIR}/src下所有源文件用SRC代替 
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)

#指定头文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

#指定生成目标v2用TARGET变量代替
set(TARGET v2)

#上面都是共同用到的资源

#添加子目录sub1
add_subdirectory(sub1)

#添加子目录sub2
add_subdirectory(sub2)

根目录下的CMakeLists.txt中的变量,对子目录来说是可见的,子目录CMakeLists.txt中定义的变量对父目录是不可见的。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值