一、概述
CMakeLists.txt是cmake编译系统构建器的构建文件,就像是make中的Makefile一样。
Makefile是通过固定的文件格式来构建目标,相对于Makefile而言,CMakeList并没有固定的语法格式,他是通过各种函数和指令来完成构建。
一个基本的CMakeList.txt内容结构为:
cmake_minimum_required(VERSION 3.4.1)
project("link_list")
# 设置变量
set(PROJ_ROOT_DIRECTORY /home/maqian/Desktop/code2019)
set(PROJ_ROOT_LIBRARY ${PROJ_ROOT_DIRECTORY}/lib)
# 添加头文件
include_directories(
../../common
)
# 添加编译选项
add_compile_options(-std=c++11)
# 添加宏定义
add_definitions(-D__LINKLIST_TEST__)
# 添加目标
add_executable(doubly_linklist doubly_linklist.cpp)
# 添加静态库
link_directories(${PROJ_ROOT_LIBRARY})
target_link_libraries(doubly_linklist ${PROJ_ROOT_LIBRARY}/libgtest.a)
二、常见用法
2.1 设置变量
设置变量的函数是set
,格式为:
set(SOURCE_DIR /usr/src/)
表示设置一个SOURCE_DIR
的变量,其值为/usr/src
。
2.2 添加头文件目录
添加上级目录下的inc
目录作为头文件的搜索路径:
include_directories(
../inc/
)
2.3 添加编译选项
添加编译选项的函数为add_compile_options
,例如指定编译标准为c++11
:
add_compile_options(-std=c++11)
设置编译标准还可以使用:set(CMAKE_CXX_STANDARD 11)。
2.4 添加宏定义
添加一个__XTEST__
的宏定义:
add_definitions(-D__XTEST__)
2.5 添加静态库
添加静态库依赖两个函数link_directories
和target_link_libraries
,用法如下:
set(PROJ_ROOT_LIBRARY /usr/lib/)
link_directories(${PROJ_ROOT_LIBRARY})
target_link_libraries(doubly_linklist ${PROJ_ROOT_LIBRARY}/libgtest.a)
要注意的是PROJ_ROOT_LIBRARY
设置的路径是全路径,并且target_link_libraries要在add_executable的后面声明。
此处评论已关闭