PS: CMakeLists.txt,这个文件是 cmake 的构建定义文件,文件名是大小写相关的,如果工程存在多个目录,需要确保每个要管理的目录都存在一个CMakeLists.txt。
cmake常用命令
基本语法规则
- 变量使用${ }方式取值,但是在 IF 控制语句中是直接使用变量名
- 指令(参数 1 参数 2...) 参数使用括弧括起,参数之间使用空格或分号分开。
以ADD_EXECUTABLE 指令为例,如果存在另外一个 func.c 源文件,就要写成:
ADD_EXECUTABLE(hello main.c func.c)或者
ADD_EXECUTABLE(hello main.c;func.c)
- 指令是大小写不相关的。参数和变量 大小写相关的。(最好养成自己固定的编写风格)
常用指令:
- CMAKE_MINIMUM_REQUIRED :
CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])
功能: 指定cmake编译器的最小版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.5) - PROJECT :
PROJECT(projectname [CXX] [C] [Java])
功能: 可以用这个指令定义工程名称,并可指定工程支持的语言
PROJECT(DEMO) - SET :
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
功能: SET 指令可以用来显式的定义变量。
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)也可以定义成:
SET(SRCS main.c func1.c func2.c) - AUX_SOURCE_DIRECTORY :
AUX_SOURCE_DIRECTORY(dir VARIABLE)
功能: 发现一个目录下所有的源代码文件并将文件列表存储在当前的变量中
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS) - ADD_SUBDIRECTORY :
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
功能: 用于向当前工程添加存放源文件的子目录. 也可以理解为去运行子目录下的CMakeLists.txt
ADD_SUBDIRECTORY(./mylib) - ADD_LIBRARY :
ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
功能: 将源文件编译成库
ADD_LIBRARY(Mylib ${SRCS}) //默认静态库
ADD_LIBRARY(Mylib SHARED ${SRCS}) //动态库 - INCLUDE_DIRECTORIES :
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
功能: 用让工程找到对应的头文件, 路径之间用空格分割
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib) - LINK_DIRECTORIES :
LINK_DIRECTORIES(directory1 directory2 ...)
功能: 添加非标准共享库的搜索路径.
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib) - TARGET_LINK_LIBRARIES :
TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2 ...)
功能: 为target添加需要链接的共享库.
TARGET_LINK_LIBRARIES(demo Mylib) - MESSAGE :
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)
功能: 该命令用于向终端输出用户的定义信息,包含了三种类型:
SEND_ERROR,产生错误,生成过程被跳过;
SATUS ,输出前缀为 — 的信息;
FATAL_ERROR,立即终止所有 cmake 过程.
MESSAGE(STATUS "TOP DIR ==> " ${PROJECT_SOURCE_DIR})
详细教程见:戳此处可获取详细教程
三联加关注后,可私信博主免费获取↑↑↑↑↑