cmake应用教学

一.单项目(即最终只有一个可执行文件)
1.创建对应文件夹和文件
在这里插入图片描述

文件结构如下:
在这里插入图片描述

代码如下:

//main.cpp
#include <head.h>

int main(){
	int a=add(5,6);
	int b=sub(2,1);
	return 0;
}
//add.cpp
#include<head.h>

int add(int a,int b){
	return a+b;
}
//sub.cpp
#include<head.h>

int sub(int a,int b){
	return a-b;
}
//head.h
int add(int a,int b);
int sub(int a,int b);

2.我们想简单的在main函数中
(1)指定头文件位置
(2)与add.cpp,sub.cpp联合编译
(3)输出文件到/bin目录下
应该怎么快速通过cmake生成编译命令?

3.将所有文件包括到SRC_LIST
file(GLOB_RECURSE SRC_LIST *.cpp)

4.指定头文件位置
include_directories(./include)

5.得到可执行文件
add_exectuable(output ${SRC_LIST})

6.文件构建如下:
在这里插入图片描述
7.启动生成的解决方案,将我们的项目设置为启动项目,点击本地windows调试器,即可编译和运行代码。
在这里插入图片描述
二.多项目(最终有多个执行文件或库文件)
在这里插入图片描述
稍微更改文件结构,将每个项目的东西放在每个单独的文件夹。这次不仅要在bin目录下生成执行文件,还要在lib库下生成add.cpp和sub.cpp的库文件。

1.先在根目录下确定:
(1)输出执行文件路径的名字
(2)头文件路径的名字
(3)输出库文件路径的名字
(4)告诉cmake有哪些子目录

编辑文件根目录的CMakeLists.txt后结果如下:

2.在每个项目里单独编写CMakeLists.txt决定此项目的编译规则。

cmake_minimum_required(VERSION 3.0)

project(calc)

set(CMAKE_CPP_STANDARD 11)

include_directories(${HEAD_PATH})

set(LIBRARY_OUTPUT_PATH ${LIB_PATH})

add_library(calc STATIC add.cpp sub.cpp)
cmake_minimum_required(VERSION 3.0)

project(main)

set(CMAKE_CPP_STANDARD 11)

include_directories(${HEAD_PATH})

set(EXECUTABLE_OUTPUT_PATH ${EXEC_PATH})

link_libraries(calc)

add_executable(main main.cpp)

3.在根目录运行命令cmake .即可得到支持visual studio的解决方案,打开后将main设置为工作目录,点击调试器即可自动编译并调试运行。
在这里插入图片描述
三.如何用find_package引入外部库
举个例子,假如我们想要在源文件里加入外部库boost,需要引入头文件和库文件(boost库比较特殊只需引入头文件即可)
有两种好一点的方法:
(1)
项目>属性>配置属性>C/C++>附加包含目录 添加头文件
项目>属性>配置属性>链接器>附加库目录 添加库目录
项目>属性>配置属性>链接器>输入>附加依赖项 添加库
(2)配置对应的环境变量 直接在上面的对应位置添加 ( I N C L U D E ) , (INCLUDE), (INCLUDE),(LIB)即可以,当然,添加库的名字还是要写的。
用find_package直接找即可。
find_package(Boost)
(当然还有其他命令选项)
其中头文件目录会定义到 B o o s t I N C L U D E D I R S 中库文件会定义到 {Boost_INCLUDE_DIRS}中 库文件会定义到 BoostINCLUDEDIRS中库文件会定义到{Boost_LIBS}
之后只需要在include_directories包含Boost_INCLUDE_DIRS
target_link_libraries(main ${Boost_LIBS})即可。
库文件目录会自动构建,不用手动指定

(3)对于常用库 可以不指定cmake文件的位置,CMake\share\cmake-3.27\Modules中都有,会自动寻找。对于此目录没有对应库文件的情况,需要指定变量BOOST_ROOT(需要大写)
set(BOOST_ROOT E:/c++_library/boost_1_82_0/tools/cmake/config)

project(test)

set(CMAKE_CPP_STANDARD 11)

set(HEAD_PATH ${PROJECT_SOURCE_DIR}/include)

set(LIB_PATH ${PROJECT_SOURCE_DIR}/lib)

set(EXEC_PATH ${PROJECT_SOURCE_DIR}/bin)

set(BOOST_ROOT E:/c++_library/boost_1_82_0/tools/cmake/config)

find_package(Boost)

message(STATUS "test1 ${Boost_DIR}")

message(STATUS "test2 ${Boost_INCLUDE_DIRS}")

message(STATUS "test3 ${Boost_LIBS}")

add_subdirectory(calc)

add_subdirectory(main)

参考资料:
https://blog.csdn.net/itworld123/article/details/128671771(主要是find_package查找的匹配规则)
https://blog.csdn.net/qq_39466755/article/details/130912344(主要是find_package实例应用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值