烈性果汁 - cmake
type: channel
link: https://www.nhyilin.cn/tag/cmake/
items: cmake使用示例与整理总结

cmake使用示例与整理总结
type: item
date: 2021-06-01T11:38:00+08:00
description: cmake使用示例与整理总结cmake中一些预定义变量PROJECT\_SOURCE\_DIR 工程的根目录PROJECT\_BINARY\_DIR 运行cmake命令的目录,通常是${PROJECT\_SOURCE\_DIR}/buildCMAKE\_INCLUDE\_PATH 环境变量,非cmake变量CMAKE\_LIBRARY\_PATH 环境变量CMAKE\_CURRENT\_SOURCE\_DIR 当前处理的CMakeLists.txt所在的路径CMAKE\_CURRENT\_BINARY\_DIR target编译目录使用ADD\_SURDIRECTORY(src bin)可以更改此变量的值SET(EXECUTABLE\_OUTPUT\_PATH <新路径>)并不会对此变量有影响,只是改变了最终目标文件的存储路径CMAKE\_CURRENT\_LIST\_FILE 输出调用这个变量的CMakeLists.txt的完整路径CMAKE\_CURRENT\_LIST\_LINE 输出这个变量所在的行CMAKE\_MODULE\_PATH 定义自己的cmake模块所在的路径SET(CMAKE\_MODULE\_PATH ${PROJECT\_SOURCE\_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块EXECUTABLE\_OUTPUT\_PATH 重新定义目标二进制可执行文件的存放位置LIBRARY\_OUTPUT\_PATH 重新定义目标链接库文件的存放位置PROJECT\_NAME 返回通过PROJECT指令定义的项目名称CMAKE\_ALLOW\_LOOSE\_LOOP\_CONSTRUCTS 用来控制IF ELSE语句的书写方式系统信息CMAKE\_MAJOR\_VERSION cmake主版本号,如2.8.6中的2CMAKE\_MINOR\_VERSION cmake次版本号,如2.8.6中的8CMAKE\_PATCH\_VERSION cmake补丁等级,如2.8.6中的6CMAKE\_SYSTEM 系统名称,例如Linux-2.6.22CAMKE\_SYSTEM\_NAME 不包含版本的系统名,如LinuxCMAKE\_SYSTEM\_VERSION 系统版本,如2.6.22CMAKE\_SYSTEM\_PROCESSOR 处理器名称,如i686UNIX 在所有的类UNIX平台为TRUE,包括OS X和cygwinWIN32 在所有的win32平台为TRUE,包括cygwin开关选项BUILD\_SHARED\_LIBS 控制默认的库编译方式。如果未进行设置,使用ADD\_LIBRARY时又没有指定库类型,默认编译生成的库都是静态库 （可在t3中稍加修改进行验证）CMAKE\_C\_FLAGS 设置C编译选项CMAKE\_CXX\_FLAGS 设置C++编译选项cmake常用命令基本语法规则：cmake变量使用${}方式取值,但是在IF控制语句中是直接使用变量名环境变量使用$ENV{}方式取值,使用SET(ENV{VAR} VALUE)赋值指令(参数1 参数2...)参数使用括弧括起,参数之间使用空格或分号分开。以ADD_EXECUTABLE指令为例： ADD_EXECUTABLE(hello main.c func.c)或者 ADD_EXECUTABLE(hello main.c;func.c)指令是大小写无关的,参数和变量是大小写相关的。推荐你全部使用大写指令。部分常用命令列表：PROJECTPROJECT(projectname [CXX] [C] [Java])指定工程名称,并可指定工程支持的语言。支持语言列表可忽略,默认支持所有语言SETSET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])定义变量(可以定义多个VALUE,如SET(SRC\_LIST main.c util.c reactor.c))MESSAGEMESSAGE([SEND\_ERROR | STATUS | FATAL\_ERROR] "message to display" ...)向终端输出用户定义的信息或变量的值SEND\_ERROR, 产生错误,生成过程被跳过STATUS, 输出前缀为--的信息FATAL\_ERROR, 立即终止所有cmake过程ADD\_EXECUTABLEADD\_EXECUTABLE(bin\_file\_name ${SRC\_LIST})生成可执行文件ADD\_LIBRARYADD\_LIBRARY(libname [SHARED | STATIC | MODULE] [EXCLUDE\_FROM\_ALL] SRC\_LIS…