基础
CMake内部构建
cmakelist.txt
#CMakeLists
1 PROJECT(HELLO) #定义工程名称
2 SET(SRC_LIST main.c) #显式定义变量(通俗讲 将文件集中起来并对其重命名)
3 MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR}
#向终端输出文件位置信息
4 MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
5 ADD_EXECUTABLE(hello SRC_LIST) #生成名为hello的可执行文件
内部构建的不足:生成的中间临时文件与代码文件混在一起,无法自动删除
入门
cmake外部构建
在根目录创建以下目录:
1.src 存放源代码
2.doc 存放工程文档
3.bin 存放生成的可执行文件
指令关联文件
#用于添加存放源文件的目录
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
#设置最终生成可执行文件的存放位置,不包含编译过程中生成的中间文件
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#设置生成共享库文件的存放位置
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
共享库相关
ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
#libname为生成的文件名称
#库类型有三种:SHARED动态库、STATIC静态库、MODULE若系统不支持dyld则被视为SHARED
#EXCLUDE_FROM_ALL表示该库不会被默认构建,除非有其他的组件依赖或者手工构建
使用外部共享库和头文件
INCLUDE_DIRECTORIES([SFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
#用于添加多个特定的头文件搜索路径,路径中包含空格可用双引号
LINK_DIRECTORIES(dir1 dir2 ...)
#添加非标准库文件搜索路径
TARGET_LINK_LIBRARIES(target library1 <debug|optimized> library2 ...)
#为target添加需要链接的共享库
CMake常用变量与指令
常用变量
1.
CMAKE_BINARY_DIR
PROJECT_BINARY_DIR
<projectname>_BINARY_DIR
#代表工程编译发生目录
2.
CMAKE_SOURCE_DIR
PROJECT_SOURCE_DIR
<projectname>_SOURCE_DIR
#代表工程顶层目录
3.
CMAKE_CURRENT_SOURCE_DIR
#当前CMakeLists.txt所在路径
4.
CMAKE_CURRENT_BINARY_DIR
#当前TARGET编译目录
5.
EXECUTABLE_OUTPUT_PATH
LIBRARY_OUTPUT_PATH
#用于定义结果存放路径
常用指令
FIND_FILE(<VAR> name1 path1 path2 ...)VAR变量代表找到的文件全路径
FIND_LIBRARY (<VAR> name1 path1 path2 ...)VAR变量代表找到的库全路径
FIND_PATH(<VAR> name1 path1 path2 ...)VAR变量代表包含该文件的路径
FIND_PROGRAM(<VAR> name1 path1 path2 ...)VAR变量代表包含该程序的全路径