一、基本语法
语法格式:指令(参数1 参数2...)
1)参数间用空格或分号隔开
2)指令大小写无关,参数和变量大小写相关
3)变量用${}方式取值,但在if语句中直接用变量名
二、重要指令
1.cmake_minimum_required - 指定CMake最小版本要求
语法: cmake_minimum_required(VERSION VersionNumber)
例:
#CMake最小版本要求为2.8.3
cmake_minimun_required(VERSION 2.8.3)
2.project - 定义工程名称,并可指定工程支持的语言
语法:project(projectname [CXX] [C] [Java])
3.set - 定义变量
语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
例:
#定义SRC变量,其值为hello.cpp bye.cpp
set(SRC hello.cpp bye.cpp)
4.include_directories - 添加多个指定的头文件搜索路径 --> 相当于gcc的-I选项
语法:include_directories(dir1 dir2...)
5.link_directories - 添加多个指定的库文件搜索路径 --> 相当于gcc的-L选项
语法:link_directories(dir1 dir2...)
6.add_library - 生成库文件
语法:add_library(libname [SHARED|STATIC|MODULE] source1 source2...)
例:
#通过SRC变量生成libsort.so动态库
add_library(sort SHARED ${SRC})
7.add_compile_options - 添加编译选项
语法:add_compile_options(<option>...)
例:
#添加编译选项 -g -O2
add_compile_options(-g -O2)
8.add_executable - 生成可执行文件
语法:add_executable(exename src1 src2...)
例:
#编译main.cpp func.cpp生成test
add_executable(test main.cpp func.cpp)
9.target_link_libraries - 为target添加需要链接的库 --> 相当于gcc的-l选项
例:
#将libsort.a(so)链接到可执行文件test
target_link_libraries(test sort)
注意:添加库之前target必须已经生成,即add_executable(test)必须在target_link_libraries(test)前面.
10.add_subdirectory - 向当前工程添加存放源文件的子目录,并可指定二进制文件存放的位置
语法:add_subdirectory(src_dir [binary_dir] [EXCLUDE_FROM_ALL])
#添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)
11.aux_source_directory - 发现一个目录下所有源文件并将列表存储在一个变量中
语法:aux_source_directory(dir VARIABLE)
#定义SRC变量,其值为当前目录下所有源文件
aux_source_directory(. SRC)
三、常用变量
1.CMAKE_C_FLAGS 相当于gcc
2.CMAKE_CXX_FLAGS 相当于g++
#在上述变量中追加编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2"}
3.CMAKE_BUILD_TYPE 编译类型
#设定编译类型为Debug或Release
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_BUILD_TYPE Release)
四、构建方式
总体编译规则的CMakeLists放在项目顶层文件夹,cmake的方式有两种:
1.内部构建:不推荐
直接在顶层文件夹执行cmake .这样构建会在顶层文件夹产生大量中间文件,使文件夹杂乱无章.
2.外部构建:推荐
#在顶层目录创建build文件夹并进入
mkdir build && cd build
#编译上级目录的CMakeLists.txt
cmake ..
#执行make
make
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)