【cmake学习】搭建一个简单的cmake工程(初级版)

17 篇文章 7 订阅

         目录

1、工程框架介绍

2、编写CMakeLists.txt

(1) 限制cmake最低版本、工程命名

(2) 引入头文件目录

(3) 引入库目录(可选)

(4) 引入源文件

(5) 生成可执行文件 / 生成动静态库 

(6) 链接库文件(可选)

3、完整CMakeLists.txt


1、工程框架介绍

cmake搭建需要关注的是工程的整体架构,其实就是把你需要用到的文件都交给cmake管理。编译的时候,你的程序需要什么,cmake就给什么;如果没有程序要求的东西,cmake就会报错。

2、编写CMakeLists.txt

(1) 限制cmake最低版本、工程命名

# 限制 cmake 最低版本为 3.0
cmake_minimum_required(VERSION 3.0)

# 为当前工程命名
project(tool_test)
  • PROJECT_NAME:cmake预置变量,代表当前工程的名字,即 tool_test

(2) 引入头文件目录

其实就是将我们项目里用到的所有头文件都交给 cmake 管理,在上面的工程里,vac/tool、vac/util 以及 app1 目录下都有头文件,所以我们要告诉 cmake 这些目录下有头文件。

include_directories(${PROJECT_SOURCE_DIR}/app1)
include_directories(${PROJECT_SOURCE_DIR}/vac/tool)
include_directories(${PROJECT_SOURCE_DIR}/3rd-part/include)
  • PROJECT_SOURCE_DIR:cmake预置变量,代表顶层CMakeLists.txt 文件所在路径

(3) 引入库目录(可选)—— 对应下面的链接库文件

如果当前项目需要使用开源的第三方库 或者 自己定义的第三方库,那就需要让cmake知道这个库在哪,否则在使用库文件中的某个函数时,会报 undefined_reference 的错误,其实就是没有找到对应的函数定义。

这里就以自己定义的第三方库为例。(一般提供第三方库至少需要提供两个内容,一个是头文件,告诉别人有哪些函数可以使用;一个是 .so 或者 .a 文件,即函数定义)

link_directories(${PROJECT_SOURCE_DIR}/3rd-part/lib)

(4) 引入源文件

头文件表示有哪些函数可供你使用,源文件就代表这些函数的具体实现 或者 main函数所在文件。因为程序在链接阶段,会根据符号表去找对应的函数定义,如果没找到函数定义,就会报 undefined_reference 的错误。

############################################################
#
# file(GLOB <variable_name> ... ) 表示将列举的内容添加到变量中 
#
############################################################
file(GLOB ALL_SOURCES 
    ${PROJECT_SOURCE_DIR}/app1/*.cpp 
    ${PROJECT_SOURCE_DIR}/vac/tool/*.cpp
)

(5) 生成可执行文件 / 生成动静态库 

# 生成名为 ${PROJECT_NAME} 的可执行文件,该可执行文件的生成依赖的源文件是 ${ALL_SOURCES}
add_executable(${PROJECT_NAME} ${ALL_SOURCES})

(6) 链接库文件(可选)

如果生成可执行文件时,需要用到第三方库的内容,而且前面已经添加了第三方库的搜索路径,那么我们可以让当前可执行文件(目标文件)与库文件建立连接。

######################################################
#
# target_link_libraries(<target_name> <library_name>)
#
######################################################
target_link_libraries(${PROJECT_NAME} test)

注意:链接库文件时,需要去掉前缀和后缀。

3、完整CMakeLists.txt

# 限制 cmake 最低版本为 3.0
cmake_minimum_required(VERSION 3.0)

# 为当前工程命名
project(tool_test)

# 引入头文件目录
include_directories(${PROJECT_SOURCE_DIR}/app1)
include_directories(${PROJECT_SOURCE_DIR}/vac/tool)
include_directories(${PROJECT_SOURCE_DIR}/3rd-part/include)

# 引入库文件搜索路径(可选)
link_directories(${PROJECT_SOURCE_DIR}/3rd-part/lib)

# 引入源文件
file(GLOB ALL_SOURCES 
    ${PROJECT_SOURCE_DIR}/app1/*.cpp 
    ${PROJECT_SOURCE_DIR}/vac/tool/*.cpp
)

# 生成可执行文件
add_executable(${PROJECT_NAME} ${ALL_SOURCES})

# 链接库文件
target_link_libraries(${PROJECT_NAME} test)
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
CMake一个跨平台的自动化建构系统,可以运行在Windows和Linux环境下。它使用一个名为CMakeLists.txt的文件来描述构建过程,并生成符合所在操作系统的Makefile文件。在Windows下,CMake还可以生成VS的工程文件系统。要安装CMake,你需要将CMake的bin目录加入到系统环境变量Path中,然后在命令提示符中输入cmake --version来验证安装是否成功。如果成功安装,系统会显示CMake本信息。 另外,你还需要安装MinGW来进行编译和链接。验证CMake与MinGW是否成功安装,可以在命令提示符中输入cmake来查看系统的响应。如果出现相关窗口,说明安装成功。 下面是一个示例,展示了使用CMake编写和构建一个简单C++程序的过程: 1. 首先,编写源码文件,可以使用下面的代码作为示例: ```c++ #include <stdio.h> int main() { printf("hello\n"); return 0; } ``` 2. 然后,编写CMakeLists.txt文件,可以使用下面的代码作为示例: ```cmake cmake_minimum_required(VERSION 3.0) project(Hello) set(SOURCE main.cpp) add_executable(${PROJECT_NAME} ${SOURCE}) ``` 3. 接下来,生成Makefile。在命令提示符中执行以下命令: ``` mkdir build cd build cmake -G"Unix Makefiles" ../ ``` 这样,CMake就会根据CMakeLists.txt文件生成相应的Makefile,然后你可以使用Makefile来编译和构建你的程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【CMake】Win10 + CMake + MinGW 简单使用](https://blog.csdn.net/zhaotun123/article/details/100042073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Windows 下 使用 CMake 和 MinGW 搭建C C++开发环境](https://blog.csdn.net/sinat_39369871/article/details/117475158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值