Cmake入门(二)多级编译命令解析
发布日期:2021-06-29 07:20:49 浏览次数:2 分类:技术文章

本文共 1794 字,大约阅读时间需要 5 分钟。

在上一节的内容中(),我给了一个使用Cmake的实例,用到了一些简单的语法。

从这节开始系统的总结一下Cmake的使用。

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中:

1.命令不区分大小写。

2.符号 # 后面的内容被认为是注释。

3.命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔

在CmakeLists.txt写好以后,创建build文件夹保存编译的中间内容和生成的文件,使用cmake指令:

mkdir build cd buildcmake ..make

在第一节中,一个libhello.cpp为了和主函数main.cpp建立联系,通过了两种方式:

1.直接在add_executable里面,把两个cpp文件都包含进去;

2.把libhello.cpp通过add_library打包成一个库hello_library,然后把hello_library通过target_link_libraries链接到可执行文件上。

但是,如果有很多个需要用到的lib.cpp呢?都这么重复太麻烦了,因此可以通过aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。

aux_source_directory(
)

那么之前的CmakeLists.txt就还可以这么写:

#声明Cmake的最低版本cmake_minimum_required( VERSION 3.0) #声明一个cmake工程project( Hello )# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)#添加一个可执行程序add_executable(Hello ${DIR_SRCS})

CMake 会将当前目录所有源文件的文件名赋值给变量 DIR_SRCS ,再指示变量 DIR_SRCS 中的源文件需要编译成一个名称为 Hello 的可执行文件。(不过如果通过这种方式,要确保只有一个main.cpp,不然cmake ..的时候不会出错,但是在make的时候就会出错。


多级目录与文件:

如果在main.cpp所在目录下再创建一个文件夹,把libhello.cpp和libhello.h放进去的话,那CMakeLists.txt该怎么写呢?

./hellofile    |    +--- main.cpp    |    +--- lib/          |          +--- libhello.cpp          |          +--- libhello.h

对于这种情况,应该先在lib文件夹内,先创建一个CMakeLists.txt:

# 查找当前目录下的所有源文件# 并将名称保存到 DIR_LIB_SRCS 变量aux_source_directory(. DIR_LIB_SRCS)# 生成链接库add_library (Hello_library ${DIR_LIB_SRCS})

这样以后,libhello.cpp文件就被打包成了一个库。这里用到的方法是把目录下的所有源文件都弄成一个变量,然后打包成库。注意语法是如果要指示某个变量里的源文件,就把它先用大括号括住,然后用美元符号$一下(类似于解引用)

对于main.cpp,它里面inlcude了"lib/libhello.h",但是h文件里只是声明,没有具体的函数定义,因此,像所述,需要把打包成的库Hello_library给链接到可执行文件上。因此这里需要用到一个新的命令:add_subdirectory(),把子目录包括进来:

#声明Cmake的最低版本cmake_minimum_required( VERSION 3.0) #声明一个cmake工程project( Hello )# 添加 lib 子目录add_subdirectory(lib)# 指定生成目标 add_executable(Hello main.cpp)# 添加链接库target_link_libraries(Hello Hello_library)

之后的Cmake相关内容总结在单独的分类里:

转载地址:https://blog.csdn.net/zkk9527/article/details/89227759 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Cmake入门(三)主要命令总结
下一篇:SLAM14讲学习笔记(十)建图与SLAM开源方案对比

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月19日 09时00分18秒