CMakeLists学习记录(编译及打包)

目录

1.变量定义

(1)一般变量

2.缓存变量

3.环境变量

4.消息打印

5.常用命令

6.生成及链接动态库

7.条件编译

8.打包

(1)系统变量:通过set进行修改,设置打包格式和内容

(2)INSTALL

9.嵌套


1.变量定义

(1)一般变量

Set(mystring,”text1”)

Set(mystring,text1)

Unset(mystring)

Set(mylist,to be)  定义mylist中变量为to和be

Set(mylist,to;be)

Set(mylist,”to;be”)

2.缓存变量

Set(mystring,text,CACHE,type,docstring,FORCE)

变量名称:mystring

变量值:text

关键字:CACHE

变量类型:type,<BOOL、FILEPATH、PATH、STRING、INTERNAL>

变量描述:docstring

只有加上FORCE才能修改变量,定义时不加不报错

3.环境变量

4.消息打印

Message(code “text”)

code为打印级别

• SEND_ERROR: 将继续处理,但跳过生成。

• WARNING: 继续处理。

• AUTHOR_WARNING: CMake 警告,继续处理。

• DEPRECATION: 若启用了CMAKE_ERROR_DEPRECATED 或CMAKE_WARN_DEPRECATED 变量,将做出相应处理。

• NOTICE 或省略模式(默认): 将向stderr 输出一条消息,以吸引用户的注意。

• STATUS: 将继续处理,建议用于用户的主要消息。

• VERBOSE: 将继续处理,用于通常不是很有必要的更详细的信息。

• DEBUG: 将继续处理,并包含在项目出现问题时可能有用的详细信息。

• TRACE: 将继续处理,并建议在项目开发期间打印消息。通常,在发布项目之前,将这些类型的消息删除。

5.常用命令

设置版本要求

Cmake_minimun_required(VERSION 3.5 FATAL_ERROR)

//cmake版本小于3.5发生致命错误

Project(Hello C CXX)

//工程名为Hello 支持的语言为C、CXX,使用project后会同步生成PROJECT_SOURCE_DIR等变量,可直接调用。

Add_executable(hello hello.cpp)

//创建可执行文件hello,源文件为hello.cpp

execute_process(COMMAND --- OUTPUT_VARIABLE --- ERROR_VARIABLE --- )

//在CMakeLists执行shell命令。第一个变量为命令,第二个为输出结果,第三个为错误信息

aux_source_directory(path result)

//查找路径path下所有源文件,返回列表result

include_directories(path)

//包含头文件路径,当在默认路径下查找不到头文件时,会继续在该路径下查找。

6.生成及链接动态库

Add_library(message STATIC message.h message.cpp)

//该关键字有四个参数,第一个参数为生成的库的名称,后续在cmake中可继续使用该名称引用该库文件。第二个参数为生成库的类型,STATIC或SHARED,静态库或动态库。生成库实际名称由cmake在message前面添加lib后面添加具体后缀形成,libmessage.so或libmessage.la.

Add_executable(hello hello.cpp)

//生成可执行文件后要链接库文件,才可以正常使用库文件中的接口

Target_link_libraries(hello message)

//可执行文件hello链接至库文件message

Add_library不仅可以编译库文件,也可以引入外部已经编译完成的库文件,

Add_library(hello STATIC IMPROTED),IMPROTED用来表示是外部引入的库文件,

通过set_property来设置属性,set_property(TARGET hello PROPERTY IMPROTED_LOCATION “./lib/libhello.la”)

也可以通过find_library、find_package来查找外部库文件

如:find_library(jsoncpp_dir NAMES jsoncpp PATHS /usr/lib/aarch64-linux-gnu/)

jsoncpp_dir为查找结果;NAMES为关键字,后面跟库名称如:jsoncpp ;PATHS为关键字后面跟查找路径。库名称一定要给对,若不知道库的路径通过在根目录下执行find寻找,如find . -name *jsoncpp*。

查找到了路径之后,使用Target_link_libraries(hello message jsoncpp_dir)链接库。

7.条件编译

从外部传入参数,cmake中根据此参数的值选择编译模块,关键词为option

Option(GW “parament” OFF)

第一个参数为变量名GW,第二个参数为描述信息,第三个参数为变量默认值

在编译时,通过-D参数传递参数值,Cmake -D A=ON可将CMakeLists中的变量值修改。也可直接在CMakeLists中,通过set修改参数值(ON或OFF)。

要想在cpp文件中使用该参数值,在CMakeLists中使用add_definitions(),例如:add_definitions(-DGW)即将定义变量GW传入cpp文件,在cpp文件中使用ifdef来判断GW的值为ON或OFF,若为ON则ifdef GW为真,反之则为假。

8.打包

(1)系统变量:通过set进行修改,设置打包格式和内容

CPACK_GENERATOR 文件格式如:”DEB”

CPACK_PACKAGE_NAME 文件名

CPACK_PACKAGE_DESCRIPTION 文件描述

CPACK_PACKAGE_VERSION_MAJOR、CPACK_PACKAGE_VERSION_MINOR、CPACK_PACKAGE_VERSION_PATCH   版本号,如1.0.0

CPACK_PACKAGE_CONTACT   联系人

CPACK_DEBIAN_PACKAGE_ARCHITECTURE  系统架构属性,区分amd64和arm64

CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA 额外信息,在其他主机解压安装安装包之前或者之后要执行的shell脚本可在此项变量中设置。如:set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "./postinst")

(2)INSTALL

INSTALL(a b c d)

要安装的文件和路径在install命令中设置。

后续待更新。。。

最后include(CPack)即完成打包操作。

9.嵌套

add_subdirectory(path)

在path下编辑相应格式的CMakeLists即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值