已hello.cpp为源文件,构建一个CMakeLists.txtcmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello hello.cpp)在目录中的build 文件夹中进行cmake ..和make ,就可以编译源文件生成可运行文件.cmake的常用命令:project 命令语句 : project(<projectname> [languageName1 languageName2 … ] )作用 : 指定项目名cmake_minimum_required 命令语句 : cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]] [FATAL_ERROR])作用 : 指定cmake需要的最小版本aux_source_directory 命令语句 : aux_source_directory(<dir> <variable>)作用 : 获取指定目录下的所有文件,保存到variable中,包括 .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx文件示例 : aux_source_directory(. var)#获取当前目录中源文件add_executable 命令语句 : add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)作用 : 将指定文件source编译成可执行文件,命名位name示例 : add_executable(hello hello.cpp)add_library 命令语句 : add_library([STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)作用 : 添加一个名为<name>的库文件,指定STATIC,SHARED,或者MODULE参数用来指定要创建的库的类型。STATIC库是目标文件的归档文件,在链接其它目标的时候使用。SHARED库会被动态链接,在运行时被加载。MODULE库是不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数动态链接。如果没有类型被显式指定,这个选项将会根据变量BUILD_SHARED_LIBS的当前值是否为真决定是STATIC还是SHARED示例 : add_library(Lib ${DIR_SRCS})add_dependencies 命令语句 : add_dependencies(target-name depend-target1 depend-target2 …)作用 : 用于指定某个目标(可执行文件或者库文件)依赖于其他的目标。这里的目标必须是 add_executable、add_library、add_custom_target 命令创建的目标add_subdirectory 命令语句 : add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])作用 : 用于添加一个需要进行构建的子目录示例 : add_subdirectory(directory)target_link_libraries 命令语句 : target_link_libraries(<target> [item1 [item2 […]]] [[debug|optimized|general] ] …)作用 : 用于指定 target 需要链接 item1 item2 …。这里 target 必须已经被创建,链接的 item 可以是已经存在的 target(依赖关系会自动添加)示例 : target_link_libraries(Main Lib)set 命令语句 : set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])作用 : 用于设定变量 variable 的值为 value。variable可以自己定义示例 : set(var "${list}_exe")unset 命令语句 : unset(<variable> [CACHE])作用 : 用于移除变量 variable。如果指定了 CACHE 变量将被从 Cache 中移除。示例 : unset(VAR CACHE)message 命令语句 : message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] “message to display” …)作用 : 输出信息示例 : message("hello world")include_directories 命令语句 : include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)作用 : 用于设定目录,这些设定的目录将被编译器用来查找 include 文件示例 : include_directories(${PROJECT_SOURCE_DIR}/lib)find_path 命令语句 : find_path(<VAR> name1 [path1 path2 …])作用 : 用于查找包含文件 name1 的路径,如果找到则将路径保存在 VAR 中(此路径为一个绝对路径),如果没有找到则结果为 <VAR>-NOTFOUND。默认的情况下,VAR 会被保存在 Cache 中,这时候我们需要清除 VAR 才可以进行下一次查询(使用 unset 命令)add_definitions 命令语句 : find_library(<VAR> name1 [path1 path2 …])作用 : 用于添加编译器命令行标志(选项),通常的情况下我们使用其来添加预处理器定义示例 : add_definitions(-D_UNICODE -DUNICODE)execute_process 命令语句 : execute_process(COMMAND <cmd1> [args1...]]  [COMMAND <cmd2> [args2...] [...]] [WORKING_DIRECTORY <directory>][TIMEOUT <seconds>][RESULT_VARIABLE <variable>]  [OUTPUT_VARIABLE <variable>]  [ERROR_VARIABLE <variable>]  [INPUT_FILE <file>][OUTPUT_FILE <file>] [ERROR_FILE <file>]  [OUTPUT_QUIET]  [ERROR_QUIET]  [OUTPUT_STRIP_TRAILING_WHITESPACE][ERROR_STRIP_TRAILING_WHITESPACE])作用 : 用于执行一个或者多个外部命令。每一个命令的标准输出通过管道转为下一个命令的标准输入。WORKING_DIRECTORY 用于指定外部命令的工作目录,RESULT_VARIABLE 用于指定一个变量保存外部命令执行的结果,这个结果可能是最后一个执行的外部命令的退出码或者是一个描述错误条件的字符串,OUTPUT_VARIABLE 或者 ERROR_VARIABLE 用于指定一个变量保存标准输出或者标准错误,OUTPUT_QUIET 或者 ERROR_QUIET 用于忽略标准输出和标准错误。示例 : execute_process(COMMAND ls)file 命令语句 : file(WRITE filename "message to write"... ) 作用 : WRITE选项将会写一条消息到名为filename的文件中。如果文件已经存在,该命令会覆盖已有的文件;如果文件不存在,它将创建该文件。===========================================================语句 : file(APPEND filename "message to write"... )作用 : APPEND选项和WRITE选项一样,将会写一条消息到名为filename的文件中,只是该消息会附加到文件末尾。 ===========================================================语句 : file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX]) 作用 : READ选项将会读一个文件中的内容并将其存储在变量里。读文件的位置从offset开始,最多读numBytes个字节。如果指定了HEX参数,二进制代码将会转换为十六进制表达方式,并存储在变量里。 ===========================================================语句 : file(STRINGS filename variable [LIMIT_COUNT num] [LIMIT_INPUT numBytes]  [LIMIT_OUTPUT numBytes] [LENGTH_MINIMUM numBytes]   [LENGTH_MAXIMUM numBytes][NEWLINE_CONSUME] [REGEX regex]  [NO_HEX_CONVERSION]) 作用 : STRINGS将会从一个文件中将一个ASCII字符串的list解析出来,然后存储在variable变量中。文件中的二进制数据会被忽略。回车换行符会被忽略。它也可以用在Intel的Hex和Motorola的S-记录文件;读取它们时,它们会被自动转换为二进制格式。可以使用NO_HEX_CONVERSION选项禁止这项功能。LIMIT_COUNT选项设定了返回的字符串的最大数量。LIMIT_INPUT设置了从输入文件中读取的最大字节数。LIMIT_OUTPUT设置了在输出变量中存储的最大字节数。LENGTH_MINIMUM设置了要返回的字符串的最小长度;小于该长度的字符串会被忽略。LENGTH_MAXIMUM设置了返回字符串的最大长度;更长的字符串会被分割成不长于最大长度的字符串。NEWLINE_CONSUME选项允许新行被包含到字符串中,而不是终止它们。REGEX选项指定了一个待返回的字符串必须满足的正则表达式。 ===========================================================语句 : file(GLOB variable [RELATIVE path] [globbing expressions]...) 作用 : GLOB选项将会为所有匹配查询表达式的文件生成一个文件list,并将该list存储进变量variable里。文件名查询表达式与正则表达式类似,只不过更加简单。如果为一个表达式指定了RELATIVE标志,返回的结果将会是相对于给定路径的相对路径。 ===========================================================语句 : file(GLOB_RECURSE variable [RELATIVE path] [FOLLOW_SYMLINKS] [globbing expressions]...) 作用 : GLOB_RECURSE选项将会生成一个类似于通常的GLOB选项的list,只是它会寻访所有那些匹配目录的子路径并同时匹配查询表达式的文件。作为符号链接的子路径只有在给定FOLLOW_SYMLINKS选项或者cmake策略CMP0009被设置为NEW时,才会被寻访到。参见cmake --help-policy CMP0009 查询跟多有用的信息。 ===========================================================语句 : file(RENAME <oldname> <newname>) 作用 : RENAME选项对同一个文件系统下的一个文件或目录重命名。===========================================================语句 : file(REMOVE [file1 ...]) 作用 : REMOVE选项将会删除指定的文件,包括在子路径下的文件。===========================================================语句 : file(REMOVE_RECURSE [file1 ...]) 作用 : REMOVE_RECURSE选项会删除给定的文件以及目录,包括非空目录。 ===========================================================语句 : file(MAKE_DIRECTORY [directory1 directory2 ...]) 作用 : MAKE_DIRECTORY选项将会创建指定的目录,如果它们的父目录不存在时,同样也会创建。(类似于mkdir命令——译注) ===========================================================语句 : file(RELATIVE_PATH variable directory file) 作用 : RELATIVE_PATH选项会确定从direcroty参数到指定文件的相对路径。 ===========================================================语句 : file(TO_CMAKE_PATH path result) 作用 : TO_CMAKE_PATH选项会把path转换为一个以unix的 / 开头的cmake风格的路径。输入可以是一个单一的路径,也可以是一个系统路径,比如"$ENV{PATH}"。注意,在调用TO_CMAKE_PATH的ENV周围的双引号只能有一个参数(Note the double quotes around the ENV call TO_CMAKE_PATH only takes one argument. 原文如此。 ===========================================================语句 : file(TO_NATIVE_PATH path result) 作用 : TO_NATIVE_PATH选项与TO_CMAKE_PATH选项很相似,但是它会把cmake风格的路径转换为本地路径风格:windows下用\,而unix下用/。 ===========================================================语句 : file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log] [EXPECTED_MD5 sum] [SHOW_PROGRESS]) 作用 : DOWNLOAD 将给定的URL下载到指定的文件中。如果指定了LOG var选项,下载日志将会被输出到var中。如果指定了STATUS var选项,下载操作的状态会被输出到var中。该状态返回值是一个长度为2的list。list的第一个元素是操作的数字返回值,第二个返回值是错误的字符串值。错误信息如果是数字0,操作中没有发生错误。如果指定了TIMEOUT time选项,在time秒之后,操作会超时退出;time应该是整数。如果指定了EXPECTED_MD5 sum选项,下载操作会认证下载的文件的实际MD5和是否与期望值匹配。如果不匹配,操作将返回一个错误。如果指定了SHOW_PROGRESS选项,进度信息会以状态信息的形式被打印出来,直到操作完成。cmake 常用语句条件控制======================  if(expression)# ...elseif(expression2)# ...else()# ...endif()======================对于 if(string) 来说:如果 string 为(不区分大小写)1、ON、YES、TRUE、Y、非 0 的数则表示真如果 string 为(不区分大小写)0、OFF、NO、FALSE、N、IGNORE、空字符串、以 -NOTFOUND 结尾的字符串则表示假如果 string 不符合上面两种情况,则 string 被认为是一个变量的名字。变量的值为第二条所述的各值则表示假,否则表示真===========================================================if中的语句:if(NOT expression)为真的前提是 expression 为假if(expr1 AND expr2)为真的前提是 expr1 和 expr2 都为真if(expr1 OR expr2)为真的前提是 expr1 或者 expr2 为真if(COMMAND command-name)为真的前提是存在 command-name 命令、宏或函数且能够被调用if(EXISTS name)为真的前提是存在 name 的文件或者目录(应该使用绝对路径)if(file1 IS_NEWER_THAN file2)为真的前提是 file1 比 file2 新或者 file1、file2 中有一个文件不存在(应该使用绝对路径)if(IS_DIRECTORY directory-name)为真的前提是 directory-name 表示的是一个目录(应该使用绝对路径)if(variable|string MATCHES regex)为真的前提是变量值或者字符串匹配 regex 正则表达式if(variable|string LESS variable|string)if(variable|string GREATER variable|string)if(variable|string EQUAL variable|string)为真的前提是变量值或者字符串为有效的数字且满足小于(大于、等于)的条件if(variable|string STRLESS variable|string)if(variable|string STRGREATER variable|string)if(variable|string STREQUAL variable|string)为真的前提是变量值或者字符串以字典序满足小于(大于、等于)的条件if(DEFINED variable)为真的前提是 variable 表示的变量被定义了循环结构foreach循环======================set(VAR a b c)foreach(f ${VAR})message(${f})endforeach()====================== while循环======================set(VAR 5)while(${VAR} GREATER 0)message(${VAR})math(EXPR VAR "${VAR} - 1")endwhile()======================宏定义macro循环======================# 定义一个宏 hellomacro(hello MESSAGE)message(${MESSAGE})endmacro()# 调用宏 hellohello("hello world")# 定义一个函数 hellofunction(hello MESSAGE)message(${MESSAGE})endfunction()======================函数定义======================function(get_func RESULT)# RESULT 的值为实参的值,因此需要使用 ${RESULT}# 这里使用 PARENT_SCOPE 是因为函数会构建一个局部作用域set(${RESULT} "Hello Function" PARENT_SCOPE)endfunction()macro(get_macro RESULT)set(${RESULT} "Hello Macro")endmacro()get_func(V1)# 输出 Hello Functionmessage(${V1})get_macro(V2)# 输出 Hello Macromessage(${V2})======================字符串控制string(REGEX MATCH (regular_expression) (output variable) (input) [(input)...])string(REGEX MATCHALL (regular_expression) (output variable) (input) [(input)...])string(REGEX REPLACE (regular_expression) (replace_expression) (output variable) (input) [(input)...])string(REPLACE (match_string) (replace_string) (output variable) (input) [(input)...])string(COMPARE EQUAL (string1) (string2) (output variable))string(COMPARE NOTEQUAL (string1) (string2) (output variable))string(COMPARE LESS (string1) (string2) (output variable))string(COMPARE GREATER (string1) (string2) (output variable))string(ASCII (number) [(number) ...] (output variable))string(CONFIGURE (string1) (output variable) [@ONLY] [ESCAPE_QUOTES])string(TOUPPER (string1) (output variable))string(TOLOWER (string1) (output variable))string(LENGTH (string) (output variable))string(SUBSTRING (string) (begin) (length) (output variable))string(STRIP (string) (output variable))string(RANDOM [LENGTH (length)] [ALPHABET (alphabet)] (output variable))cmake 常用变量UNIX 如果为真,表示为 UNIX-like 的系统,包括 Apple OS X 和 CygWinWIN32 如果为真,表示为 Windows 系统,包括 CygWinAPPLE 如果为真,表示为 Apple 系统CMAKE_SIZEOF_VOID_P 表示 void* 的大小(例如为 4 或者 8),可以使用其来判断当前构建为 32 位还是 64 位CMAKE_CURRENT_LIST_DIR 表示正在处理的 CMakeLists.txt 文件的所在的目录的绝对路径(2.8.3 以及以后版本才支持)CMAKE_ARCHIVE_OUTPUT_DIRECTORY 用于设置 ARCHIVE 目标的输出路径CMAKE_LIBRARY_OUTPUT_DIRECTORY 用于设置 LIBRARY 目标的输出路径CMAKE_RUNTIME_OUTPUT_DIRECTORY 用于设置 RUNTIME 目标的输出路径可能会用到的一些命令get_property 获取一个属性值get_property(<variable><GLOBAL             |DIRECTORY [dir]    |TARGET    <target> |SOURCE    <source> |TEST      <test>   |CACHE     <entry>  |VARIABLE>PROPERTY <name>[SET | DEFINED | BRIEF_DOCS | FULL_DOCS])get_source_file_property  为一个源文件获取一种属性值get_source_file_property(VAR file property)get_target_property 从一个目标中获取一个属性值get_target_property(VAR target property)get_test_property 获取一个测试的属性get_test_property(test VAR property)get_cmake_property  获取一个CMake实例的属性get_cmake_property(VAR property)get_filename_component 得到一个完整文件名中的特定部分get_filename_component(<VAR> FileNamePATH|ABSOLUTE|NAME|EXT|NAME_WE|REALPATH[CACHE])get_cmake_property  获取一个CMake实例的属性。get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)参考 : http://www.cnblogs.com/coderfenghc/archive/2012/07/08/2581734.html
http://name5566.com/1795.html  

转载于:https://www.cnblogs.com/Free-Thinker/p/6168733.html

CMakeListx.txt 编辑语法学习相关推荐

  1. ROS知识: vanilla(香草) CMakeLists.txt 的语法

    (catkin/CMakeLists.txt - ROS Wiki) 前言 首先,对于学习ROS,CMakeLists.txt 的语法非常重要:如果不懂将无法开发!而要想明白 vanilla(香草) ...

  2. 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统

    2 C++基础语法学习(1)之黑客攻击系统 遵循原则:从实战中学习知识 法律声明:本系统仅能攻击自己搭建的网站,作为学习使用,不会触犯法律 time:2020.01.20 author:姜海天 IDE ...

  3. Go基础语法学习总结

    Go基础语法学习总结 一.基础语法 1.常见数据类型 数据类型包括有:布尔类型.字符串类型.数字类型(整型.浮点型.复数等).派生类型(数组类型.slice 切片类型.map 集合类型.struct ...

  4. Presto 与 Hive 语法学习

    Presto 与 Hive 语法学习 文章目录 Presto 与 Hive 语法学习 1. Presto语法 1.1 数据类型 布尔值 整数 浮点 固定精度 字符串 日期和时间 结构 网络地址 UUI ...

  5. Oracle PL/SQL基础语法学习13:比较运算符

    系列文章目录 Oracle PL/SQL基础语法学习12:短路求值 Oracle PL/SQL基础语法学习13:比较运算符 Oracle PL/SQL基础语法学习14:BOOLEAN表达式 文章目录 ...

  6. markdown编辑语法基础篇

    文章目录 欢迎使用markdown编辑语法 1.Markdown简介 1.1 markdown是什么? 1.2为何使用markdown 2.基本语法 2.1 快捷键 2.2代码块 2.3 分级标题 写 ...

  7. jar包等概念的理解、yaml语法学习和多环境切换

    一.学习内容 jar包等概念的理解 yaml语法学习 多环境切换 1.jar包等概念的理解 这部分的学习内容是关于一些名词的解释,这些名词是我在看课过程中,听到或看到却又未曾了解的.因为不理解这些名词 ...

  8. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  9. [转]verilog语法学习心得

    verilog语法学习心得 1.数字电路基础知识: 布尔代数.门级电路的内部晶体管结构.组合逻辑电路分析与设计.触发器.时序逻辑电路分析与设计 2.数字系统的构成: 传感器  AD  数字处理器  D ...

最新文章

  1. 他是中国投资最厉害的人:投网易一战成名 是巴菲特忠实信徒
  2. 【Spring学习笔记】之【3.3 DI的深入 二】
  3. Android 8.0 adb分析
  4. 关于async与await的FAQ 转
  5. 理解工作流系统参考模型
  6. socekt编程-select
  7. java版本-API接口测试框架搭建
  8. 2021汉语言文学对高考成绩查询,2021汉语言文学专业就业前景怎么样
  9. 如何维持手机电池寿命_手机电池不耐用,都怪这些充电坏毛病
  10. go中select用法详解
  11. 自编码器模型详解与实现(采用tensorflow2.x实现)
  12. C++11多线程std::thread的简单使用
  13. Atitit 破解qq空间(2)-------探测权限
  14. C++项目经验(6)——yaml-cpp的安装、报错解决及使用
  15. 卷积码主要是对抗_采用卷积编码的原因和优势 浅析卷积码之特点
  16. [TJOI2019]唱、跳、rap和篮球——NTT+生成函数+容斥
  17. CF 949D Curfew——贪心(思路!!!)
  18. 串口流控制DCB结构体解析及设置
  19. 绿盟漏扫系统漏洞及修复方案
  20. 量化投资学习——对于中性化的理解

热门文章

  1. JAVA 基本运算符(摘)
  2. 设置c#windows服务描述及允许服务与桌面交互的几种方法
  3. 如何隐藏system函数的窗口
  4. linux下eclipse cdt引用函数库设置问题
  5. Leetcode 698. 划分为k个相等的子集 解题思路及C++实现
  6. Pandas缺失数据最快定位方式(极少代码快速实现,打死不用循环!!!!!)
  7. 动手学深度学习打卡之二。
  8. 浪漫的html表白源代码_Love:程序猿的方式【情人节amp;520—我爱你】动画加音效 → 那些年最浪漫的表白(帮你得到你的她)...
  9. Backbone集合
  10. FileChannel应用实例——本地文件读数据(假定文件已存在)