【Linux环境下Cmake使用入门】


原文
https://blog.youkuaiyun.com/weixin_43717839/article/details/128032486

Cmake的安装

可以使用apt-get install cmake命令直接安装Cmake包。安装好后输入一下命令,若出现版本号则表示安装成功。
在这里插入图片描述

1. 单个文件main的编译

main.c源文件
在这里插入图片描述
CMakeMists.txt
在这里插入图片描述
//第一个参数是生成可执行文件的名字,第二个参数是源文件名字
add_executable(mian main.c)

main.c和CMakeLists.txt在同一个目录下,最后在此目录下执行cmake命令
在这里插入图片描述
会生成中间文件。再执行make命令。生成可执行文件main。在这里插入图片描述
在这里插入图片描述

2. 多个源文件文件编译

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

aux_source_directory

将多个源文件放在add_executable(mian main.c)的源文件后面,可以发现,在编译多个源文件时只要add_executable里把所有源文件都添加进去就可以了。但是这种情况当有很多源文件时,就要列举出所有源文件名称。这样效率不高。我们可以使用aux_source_directory把当前目录下的源文件存列表存放到变量SRC_LIST里;
在这里插入图片描述
.表示CMakeLists所在目录,即该文件所在当前目录。
aux_source_directory()也存在弊端,它会把指定目录下的所有源文件都加进来,可能会加入一些我们不需要的文件,此时我们可以使用set命令去新建变量来存放需要的源文件
在这里插入图片描述

在不同目录下多个源文件文件编译

在这里插入图片描述

在这里插入图片描述
include_directories为工程添加多个头文件的搜索路径,这样我们在main.c中就可以直接引用

// 
#include"fun.h"
#include"fun1.h"
int main(void){
  .....
}

而不是

// 
#include"fun/fun.h"
#include"fun1/fun1.h"
int main(void){
  .....
}

3.项目级的组织结构

头文件放在一个文件夹。源文件放在当前项目文件夹下在这里插入图片描述在这里插入图片描述

头文件放在一个文件夹。源文件放在一个文件夹
在这里插入图片描述

cmake_minimum_required (VERSION 2.8)

project (demo)
//将生成的可执行文件夹放在文件夹bin中
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

aux_source_directory (src SRC_LIST)

include_directories (include)

add_executable (main ${SRC_LIST})

运行结果
在这里插入图片描述

4. 动态库和静态库编译

4.1 库文件的生成

在这里插入图片描述

cmake_minimum_required (VERSION 2.8)

project (demo)
//将SRC_LIST 变量设置为testFunc.c的路径。
set (SRC_LIST ${PROJECT_SOURCE_DIR}/textFunc/testFunc.c)
//生成静态库,第一个参数为指定库的名字,第二个参数决定是动态还是静态,第三个指定生成库的源文件。
add_library(testFunc_shared SHARED ${SRC_LIST })
add_library(testFunc_static STATIC ${SRC_LIST })
//设置最终生成的库的名称,还有其他功能,如设置库的版本号等。
set_target_properties (testFunc_shared PROPERTIES OUTPUT_NAME "testFunc")
set_target_properties (testFunc_static PROPERTIES OUTPUT_NAME "testFunc")
//设置库文件保存的地方
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

最终在bin文件夹下生成动态库libtestFunc.so和静态库libtestFunc.a

4.2 库文件的链接

在这里插入图片描述

cmake_minimum_required (VERSION 2.8)

project (demo)
//可执行文件保存的地方
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

//设置变量SRC_LIST 的值
set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/main.c)
#包含头文件目录
include_directories(${PROJECT_SOURCE_DIR}/testFunc/inc)
//到指定目录下去寻找testFunc(testFunc 默认为动态库文件,若要使用指定静态则使用testFunc.a)库文件
//使用find_library的好处是在执行cmake …时就会去查找库是否存在,这样可以提前发现错误,不用等到链接时。
find_library(TESTFUN_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)
//这里也可以使用add_executable(main main.c)
add_executable(main ${SRC_LIST})
//将目标文件与库文件进行链接
target_link_libraries(main ${TESTFUN_LIB })

查看elf文件使用了哪些库,可以使用readelf -d ./xx来查看 例:readelf -d ./main

5. 总结

Cmake的知识点还有很多,这里只是简单的入门。

参考资料
https://subingwen.cn/cmake/CMake-primer/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值