目录
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即可