CMake常见语法
前言
- 每一个需要进行cmake操作的目录下面,都必须存在文件CMakeLists.txt 。
- cmake指令不区分大小写。
- 变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名;
- 指令(参数 1 参数 2…),参数使用括弧括起,参数之间使用空格或分号分开;
通过TeamTalk源码学习Cmake语法
- 文件目录:/TeamTalk-master/server/src/login_server/CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required(VERSION 2.6)
# 项目信息
PROJECT(loginserver)
# 查找当前目录下的所有源文件
# 并将名称保存到 SRC_LIST 变量
AUX_SOURCE_DIRECTORY(./ SRC_LIST)
# 设置输出文件目录
SET(EXECUTABLE_OUTPUT_PATH ../bin)
# 添加外部库的路径
if(APPLE)
SET(PB_LIB_DIR ../base/pb/lib/mac)
elseif(UNIX)
SET(PB_LIB_DIR ../base/pb/lib/linux)
endif()
# 为当前路径以及下层路径的目标加入编译器命令行定义
ADD_DEFINITIONS( -g -W -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DAC_HAS_INFO
-DAC_HAS_WARNING -DAC_HAS_ERROR -DAC_HAS_CRITICAL -DTIXML_USE_STL
-DAC_HAS_DEBUG -DLINUX_DAEMON -std=c++11)
# 向工程添加多个特定的头文件搜索路径。
# 当项目需要的头文件不在系统默认的搜索路径时,则指定该路径。
INCLUDE_DIRECTORIES(./ ../base ../base/pb/protocol ../base/jsoncpp/ ../base/pb/)
# 添加外部库的路径
LINK_DIRECTORIES(./ ../bin ${PB_LIB_DIR} ../base/slog/lib)
# 指定生成目标
# 给出源文件名称,并指出需要编译出的可执行文件名
ADD_EXECUTABLE(login_server ${SRC_LIST})
# 链接目标文件时需要链接的外部库
# login_server 为目标文件
TARGET_LINK_LIBRARIES(login_server base protobuf-lite slog pthread)
其他命令
1. ADD_LIBRARY
格式:ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
- libname:库文件名称;
- [SHARED|STATIC|MODULE]:生成库文件类型(共享库/静态库)
- [EXCLUDE_FROM_ALL]:表示该库不会被默认构建
- source1, …, sourceN:生成库所依赖的源文件