菜鸟笔记
提升您的技术认知

cmake基本语法-ag真人游戏

操作数

* 类型

分类

bool string path filepath - 配置变量类型

list

转换

推导

* 具名

  声明周期:set 声明,${具名},unset取消

# 定义一个变量 判断是否定义用defined
set(<变量名> <变量值>)
# 引用一个变量
${变量名}
# 取消一个变量
unset(<变量名>)

内部变量:

  系统环境变量  $env{<环境变量名>}

  工程源目录和bin目录

  • project_source_dir                          顶级cmakelists所在目录
  • project_binary_dir                            cmake生成目录
  • cmake_current_source_dir          cmakelists所在目录
  • cmake_current_binary_dir            工程文件所在目录
  • cmake_current_list_file                引用这个变量所在文件的全路径
  • cmake_current_list_dir                 引用这个变量所在文件的全目录
  • cmake_current_list_line               引用这个变量所在文件行号
  • cmake_install_prefix                      安装目录前缀

  工程自身变量

  • project_name
  • _version
  • _version_major

  符号文件、静态库、动态库和运行输出目录变量

  • cmake_pdb_output_directory
  • cmake_pdb_output_directory_
  • cmake_archive_output_directory
  • cmake_archive_output_directory_
  • cmake_library_output_directory
  • cmake_library_output_directory_
  • cmake_runtime_output_directory
  • cmake_runtime_output_directory_

   区别系统

  • cmake_host_win32
  • cmake_host_unix(注意macos也属于unix)
  • cmake_host_apple
  • cmake_system_name
  • cmake_host_system_processor (uname -p 或%processor_architecture%)

   配置

  • cmake_configuration_types                  多配置的generator才存在,(debug、release...)
  • cmake_build_type

  编译器   

  • xcode_version
  • msvc_version                                                1800表示visual studio 2013
  • msvc

  编译参数

  • cmake_c_flags
  • cmake_cxx_flags
  • cmake_cxx_standard           指定c 标准,可设置为11

  链接参数 

  • cmake_shared_linker_flags    指定链接库空格间隔,
  • cmake_exe_linker_flags

  配置

  • cmake__postfix          指定目标名称后缀,比如set(cmake_debug_postfix "d")

  其他

  • build_shared_libs                指定生成动态库开关,默认为on
  • cmake__postfix   指定生成配置文件后缀,比如debug的库带d

常量 

真:1 on yes true y

假:0 off no false n ignore notfound

set(cmake_exe_linker_flags "${cmake_exe_linker_flags} /subsystem:console")

运算符

  • equal   less   greater   strequal   strless   strgreater
  • version_equal   version_less   version_greater
  • matches         正则匹配
  • not  and   or
  • exists   is_directory 
  • command   判断函数或者宏是否可以触发
  • target        判断目标是否存在
  • defined      判断是否 set,直接变量名
  • in_list

流程控制

分支控制

# 单分支
if()
  set()
endif()
# 双分支
if()
  set()
else()
  set()
endif()
# 多分支
if()
  set()
elseif()
  set()
else()
  set()
endif()

循环控制

# 列表遍历
# 第一种表达
foreach( in lists )
    message("")
endforeach()
# 第二种表达
foreach( ${})
    message("")
endforeach()
# 遍历多项
foreach(item item1 item2 item3})
    message("${item}")
endforeach()
# 循环n次
foreach(loop_var range num)
endforeach()
foreach(loop_var range 0 num 1)
endforeach()

函数

基本形式

function(<函数名> <变量名> ...)
endfunction()

函数类型

调用方式

string(toupper ...)

string(append ...)

string(regex match ...)

list(append ...)

标准函数

message                            打印消息

add_subdirectory               包含子cmakelists.txt目录

include                                包含其他*.cmake文件

include_directories             头文件包含目录

link_directories                   库链接目录

target_link_libraries            添加链接库

add_definitions                   添加编译参数或宏

add_dependencies             为target指定依赖的target

add_executable                  添加可执行程序target

add_library                         添加静态库或者动态库target

add_compile_definitions

add_compile_options

add_link_options

target_compile_definitions 为目标添加编译参数或宏

target_compile_options

target_link_options

target_include_directories 为目标添加包含目录

target_link_directories

target_link_libraries

externalproject_add          添加一个外部target,多用于安装,更新等

get_cmake_property          获取cmake工程的所有变量,包括自定义和自带变量

source_group                    为ide工程设置分组,vs相当于筛选器

find_path                           从默认目录和指定目录查找头文件,并返回结果

find_library                        从默认目录和指定目录查找库文件,并返回结果

find_package(name)         从cmake_module_path目录中查找find.cmake 模块,并放入工程中使用

file                                     读写文件创建删除文件,重新命名文件等等

语法概念

target

cmake认为一个执行体、一个库或者自定义的target为一个target,通过add_executable,add_library,add_custom_target、externalproject_add来增加target,简单来说通过这三个函数添加的,就是一个target,可通过if(target target-name)来判断

command

简单来讲就是宏和函数,通过if(command command-name)来判断

网站地图