CMake入门知识(2)

目录

1.find_file命令

2.find_path 命令

3.find_library 命令

4.find_package命令

5.add_definitions 命令

6. find_program命令

7. configure_file命令

8. file命令

9. install命令

10. CMake 自定义函数

 11. 条件语句

12. 循环语句


1.find_file命令

命令语法:find_file(<VAR> name1 [path1 path2 ...])

命令描述:VAR 变量代表(在默认路径下,以及path1,path2...)找到的文件name1的 全路径,包含文件名


2.find_path 命令

命令语法:find_path(<VAR> name1 [path1 path2 ...])

命令简述:用于查找(在默认路径下,以及path1,path2...)包含文件 name1 的路径,如果找到则将路径保存在 VAR 中(此路径为一个绝对路径),如果没有找到则结果为 <VAR>-NOTFOUND。默认的情况下,VAR 会被保存在 Cache 中,这时候我们需要清除 VAR 才可以进行下一次查询(使用 unset 命令)。

find_path(LUA_INCLUDE_PATH lua.h ${LUA_INCLUDE_FIND_PATH})

3.find_library 命令

命令语法:find_library(<VAR> name1 [path1 path2 ...])

命令简述:用于查找(在默认路径下,以及path1,path2...)库文件 name1 的路径,如果找到则将路径保存在 VAR 中(此路径为一个绝对路径),如果没有找到则结果为 <VAR>-NOTFOUND。

FIND_LIBRARY(libX X11 /usr/lib)

4.find_package命令

命令语法:find_package(<name>  [ [REQUIRED|COMPONENTS] [componets...] ])

命令简述:

find_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到,后续只管用就好了。

该命令用来调用预定义在 CMAKE_MODULE_PATH 下的 Find<name>.cmake 模块,你也可以自己定义 Find<name>模块,通过 SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录中供工程使用

find_package( Qt5 COMPONENTS Core Widgets Gui Multimedia PrintSupport REQUIRED ) 
find_package ( Subversion )

5.add_definitions 命令

命令语法:add_definitions(-DFOO -DBAR …)

命令简述:用于添加编译器命令行标志选项),通常的情况下我们使用其来添加预处理器定义

add_definitions( -rdynamic -frtti )                            # 添加编译器命令行标志

6. find_program命令

命令语法:find_program (<VAR> name1 [path1 path2 ...])

命令简述:用于查找(在默认路径下,以及path1,path2...)程序 name1 的路径,如果找到则将路径保存在 VAR 中(此路径为一个绝对路径),如果没有找到则结果为 <VAR>-NOTFOUND。

find_program ( SVNVERSION svnversion NO_CMAKE_FIND_ROOT_PATH )

7. configure_file命令

命令语法:configure_file( <input> <output> options )

命令简述:将一个文件(由input参数指定)拷贝到指定位置(由output参数指定),并根据options修改其内容。

configure_file命令会根据options指定的规则,自动对input文件中cmakedefine关键字及其内容进行转换。
具体来说,会做如下几个替换:
1. 将input文件中的@var@或者${var}替换成cmake中指定的值。
2. 将input文件中的#cmakedefine var关键字替换成#define var或者#undef var,取决于cmake是否定义了var

configure_file (config.h.in config.h)

8. file命令

file — CMake 3.23.1 Documentation

命令语法:常用的如下

file(READ <filename> <out-var> [...])
从 <filename> 读内容并保存在 <out-var>

file({WRITE | APPEND} <filename> <content>...)
把内容 <content> 写入文件 <filename>

file({GLOB | GLOB_RECURSE} <out-var> [...] [<globbing-expr>...])
用满足 <globbing-expr> 的所有文件,生成一个列表,并保存在 <out-var>

9. install命令

命令语法:

install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])

命令简述:用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。

普通文件的安装:

install(<FILES|PROGRAMS> files...
        TYPE <type> | DESTINATION <dir>
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>]
        [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

将 <FILES|PROGRAMS> 安装(复制)到 <dir> 中,FILES为普通的文本文件,PROGRAMS指的是非目标文件的可执行程序(如脚本文件)

DESTINATION:指定磁盘上要安装文件的目录;
PERMISSIONS:指定安装文件的权限。有效权限是OWNER_READ,OWNER_WRITE,OWNER_EXECUTE,GROUP_READ,GROUP_WRITE,GROUP_EXECUTE,WORLD_READ,WORLD_WRITE,WORLD_EXECUTE,SETUID和SETGID;
CONFIGURATIONS:指定安装规则适用的构建配置列表(DEBUG或RELEASE等);
EXCLUDE_FROM_ALL:指定该文件从完整安装中排除,仅作为特定于组件的安装的一部分进行安装;
OPTIONAL:如果要安装的文件不存在,则指定不是错误;
RENAME:指定已安装文件的名称,该名称可能与原始文件不同。仅当命令安装了单个文件时,才允许重命名。

install ( FILES ${MYPROJ_HEADERS} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../include/myproj )

目录的安装:

install(DIRECTORY dirs...
        TYPE <type> | DESTINATION <dir>
        [FILE_PERMISSIONS permissions...]
        [DIRECTORY_PERMISSIONS permissions...]
        [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>] [EXCLUDE_FROM_ALL]
        [FILES_MATCHING]
        [[PATTERN <pattern> | REGEX <regex>]
         [EXCLUDE] [PERMISSIONS permissions...]] [...])

该命令将一个或多个目录的内容安装到给定的目的地,目录结构被逐个复制到目标位置。如果指定了 USE_SOURCE_PERMISSIONS 而未指定 FILE_PERMISSIONS,则将从源目录结构中复制文件权限。/ 的作用是只安装目录下的文件,而不安装目录本身。

install(DIRECTORY icons scripts/ DESTINATION share/myproj
        PATTERN "CVS" EXCLUDE
        PATTERN "scripts/*"
        PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
                    GROUP_EXECUTE GROUP_READ)

这条命令的执行结果是:将icons目录安装到share/myproj,将scripts/中的内容安装到share/myproj,两个目录均不包含目录名为CVS的子目录,对于scripts/*的文件指定权限为OWNER_EXECUTE,OWNER_WRITE,OWNER_READ,GROUP_EXECUTE,GROUP_READ。
 


10. CMake 自定义函数

命令格式:

function ( <func name> arg1 arg2 arg3 ... )
    COMMAND( arg1 .. )
    COMMAND( arg2 .. )
endfunction( <func name> )    #可省略func name

命令简述:自定义一个函数

function(adder name num)
    message("${name} is ${num} years old!")
endfunction()

adder( "Cjh" 18 )


 11. 条件语句

if( WIN32 )
    cmd
elseif( UNIX )
    cmd
else()
    cmd
endif()

12. 循环语句

foreach(<loop_var> <items>)
  <commands>
endforeach()

foreach(<loop_var> RANGE <stop>)   #foreach遍历数字0,1,…直到(并包括)非负整数< stop >。
  <commands>
endforeach()

foreach(<loop_var> RANGE <start> <stop> [<step>])
  <commands>
endforeach()



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值