Cmake入门(三)主要命令总结
发布日期:2021-06-29 07:20:49 浏览次数:2 分类:技术文章

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

在的总结中,分别总结了一些编译程序所必须的命令和应用实例,分别是:

cmake_minimum_required 声明最低版本

project 声明工程名字

add_executable 添加可执行文件

add_library 打包成库

target_link_libraries 链接库到可执行文件上

aux_source_directory(<dir> <variable>)  把指定目录存进指定变量

add_subdirectory    添加子目录


本文将对剩余的部分常用命令做一个总结:

1. include_directories 指定头文件的搜索路径 (还是和之前一样的例子,lib.cpp文件和lib.h文件放在lib文件夹下,在文件夹以外的main.cpp必须把头文件include进来,include之后应该把路径跟上,例如#include"lib/lib.h",而通过在CMakeLists中加这么一句include_directories(./lib),那么main.cpp中即可直接#include"lib.h"而不用指定其路径。

2. message 执行Cmake命令时打印消息,具体形式为:MESSAGE([SEND_ERROR | STATUS| FATAL_ERROR] "message to display"),前面是可选的消息类型,后面是想要显示的消息内容

3. set 设置命令,具体形式为:SET(变量名 变量值)。对于这个命令,可以拿它来设置自定义的变量名,也可以设置cmake的内部变量,例如:

set( CMAKE_BUILD_TYPE "Release" )set( CMAKE_CXX_FLAGS "-O3" )# 添加c++ 11标准支持set( CMAKE_CXX_FLAGS "-std=c++11" )

顺便提一句,编译类型可以设置Release或者Debug。二者区别在于:Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息;Release模式下生成一个文件.exe或.dll文件。前者是调试版本,后者是发布版本。默认是debug版本的。附带关于内置变量的说明:

CMAKE_INSTALL_PREFIX  #make install 的安装路径CMAKE_BUILD_TYPE #生成的目标为debug或者releaseCMAKE_C_FLAGS #gcc 的编译参数指定,一般通过set 修改其值CMAKE_CXX_FLAGS #g++ 和上面CMAKE_C_FLAGS 类似CMAKE_CURRENT_SOURCE_DIR # 当前CMakeLists.txt所在的目录,主要用来定位某文件CMAKE_CURRENT_BINARY_DIR # 当前CMakeLists.txt对应的编译时的目录

当然也可以随便按照自己的需求set一个变量,例如

set( My_flag 1 )

这样之后可以用${My_flag}来引用这个变量 

4. set_target_properties 这个主要用途是解决相同名字的动态或者静态target被删除的问题。直接用例子来解释:

#片段ADD_LIBRARY (hello_static STATIC ${LIBHELLO_SRC})SET_TARGET_PROPERTIES (hello_static PROPERTIES OUTPUT_NAME "hello")

为了防止library中共享库和静态库重名,因此让"hello_static" 在输出时,不是"hello_static",而是以"hello"的名字显示。、

其中,OUTPUT_NAME 是可变的,比如可以换成hello_static对于CLEAN_DIRECT_OUTPUT这个属性的定义,或者是针对动态库定义其版本号和API号(VERSION指代动态库版本,SOVERSION指代API版本):

SET_TARGET_PROPERTIES (hello PROPERTIES VERSION 1.2 SOVERSION 1)

5get_target_property,是把target的属性弄到变量里去,例如(把刚刚对hello_static换的名字hello保存到OUTPUT_VALUE这个变量里去:

get_target_property (OUTPUT_VALUE hello_static OUTPUT_NAME)

具体这块的内容,参见某位博主的详细解释:

6. link_directories:动态链接库或静态链接库的搜索路径,类似于include_directories的用法

7option(var_name "comment" var_value)  给变量var_name赋值为var_value,comment是此变量的注释,和SET有类似的功效,用于给某变量设置默认值

8. configure_file 作用是让普通文件也能使用CMake中的变量。 也就是说代码文件中可以使用CMake中的变量。详解见。


在之后的内容里,我还会讲解关于Install和非常重要的两大命令。

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

上一篇:Cmake入门(四)find_package
下一篇:Cmake入门(二)多级编译命令解析

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月10日 07时58分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

2021 技术展望 | 走向未来的实时生成技术 2019-04-29
最近爆火的互动播客,要解决哪些技术难题? 2019-04-29
详解低延时高音质:编解码篇 2019-04-29
详解低延时高音质:回声消除与降噪篇 2019-04-29
2021 技术展望 | 弱网下的极限实时视频通信 2019-04-29
2021 技术展望 | 2021,5G 将会倒逼传输协议、算法做出更多改进 2019-04-29
声网Agora发布创业支持计划:聚合50+合作伙伴、11项资源扶持创业者 2019-04-29
详解低延时高音质:丢包、抖动与 last mile 优化那些事儿 2019-04-29
2021 技术展望 | 实时互动场景下,音频的技术变迁与机遇 2019-04-29
2021技术展望|开源十年,WebRTC 的现状与未来 2019-04-29
RTC月度小报3月|声网发布创业支持计划、声网发布教育新品、互动播客要解决哪些技术难题、... 2019-04-29
声网 X 远程超声:实时音视频解决基层“看病难” 推动医疗资源均衡化 2019-04-29
RTE 2021 创新编程挑战赛开始了!快来实现你的应用创意! 2019-04-29
使用 Agora SDK 开发 React Native 视频通话 App 2019-04-29
声网推出首个完整实时合唱解决方案 即将上线“咪哒”全国线下K歌房 2019-04-29
Why WebRTC|前世今生 2019-04-29
开发一个实时音视频通信系统,你需要什么技术储备? 2019-04-29
VR实时语音,带着最好的武器去战斗 2019-04-29
直播六脉神剑,练好这几招才能行走江湖 2019-04-29
终于有一款视频社交应用打破微信的榜首垄断了,Faceu再登Appstore总榜第一 2019-04-29