一 cmake 选项
-G 指定一个makefile生成工具。
二 常用命令
1 添加头文件目录和库文件目录
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])相当于-I
link_directories(directory1 directory2 ...) 相当于-L
2 set 设置变量
set(var "test") 调用${var}即为"test"
3 使用给定的源文件,为工程引入一个可执行文件
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)
4 使用给定的源文件,为工程生成一个库,并添加到工程
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)
5 将dir目录下的所有源文件放到variable变量中
aux_source_directory(<dir> <variable>)
6 查找库文件
find_library(<VAR> name1 [path1 path2 ...])
7 将给定的库链接到一个目标上
target_link_libraries(<target> [item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)
8 为构建添加一个子路径
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
9 为源文件的编译添加选项 如-g -w
add_definitions(-DFOO -DBAR ...)
10 列表操作
list(<cmd> <list> ..)
使用LENGTH选项时,该命令会返回给定list的长度。
使用GET选项时,该命令返回list中所有被index索引的元素构成的list。
使用APPEND选项时,该命令将会在该list之后追加若干元素。
使用FIND选项时,该命令将返回list中指定的元素的索引;若果未找到,返回-1。
使用INSERT选项时,该命令将在list中指定的位置插入若干元素。
使用REMOVE_AT和REMOVE_ITEM选项将会从list中删除一些元素。它们之间的区别是:REMOVE_ITEM删除的是指定的项,而REMOVE_AT删除的是在指定索引处的项。
使用REMOVE_DUPLICATES选项时,该命令将删除list中的重复项。
使用REVERSE选项时,该命令将把list的内容就地前后倒换。
使用SORT选项时,该命令将按字母序对list总的内容就地排序。
cmake_minimum_required 设置一个工程所需要的最低CMake版本。
set_target_properties 设置目标的一些属性来改变它们构建的方式
file 文件操作命令
find_file 查找一个文件的完整路径
find_path 搜索包含某个文件的路径
math 数学表达式
project 项目名称
message([-] "message") 输出[STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
option 为用户提供一个可选项
string 字符串操作函数
unset 撤销对一个变量
三 条件
比较条件见http://www.cnblogs.com/coderfenghc/archive/2012/07/29/2614253.html
if(expression)
#
elseif(expression)
#
else(expression)
#
endif(expression)
四 循环
1 foreach
(1)
set(mylist "a" "b" c "d")
foreach(_var ${mylist})
message("当前变量是:${_var}")
endforeach()
(2)
foreach(_var RANGE 0 100)
math(EXPR result "${result}+${_var}")
endforeach()
2 while
while(condition)
COMMAND1(ARGS ...)
...
endwhile(condition)
while与endwhile之间的命令将被记录但不执行。当endwhile中的condition为真时才执行
五 宏和方法
1 宏
macro( [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
...
endmacro()
eg.
macro(sum outvar)
set(_args ${ARGN})
set(result 0)
foreach(_var ${_args})
math(EXPR result "${result}+${_var}")
endforeach()
set(${outvar} ${result})
endmacro()
sum(addResult 1 2 3 4 5)
ARGN系统变量,指代入宏中多余的参数,即12345
addResult即outvar,可以得到最后的结果
2 方法
function(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
...
endfunction(<name>)
与宏类似,宏中的变量是全局的,方法中的是局部的,宏中的结果可以直接传递出来,方法不方便
六 常量
CMAKE_CACHEFILE_DIR 文件CMakeCache.txt所在的路径
CMAKE_C_COMPILER 指定C编译器
CMAKE_CXX_COMPILER c++
EXECUTABLE_OUTPUT_PATH 可执行文件的输出路径
小例子:
cmake_minimum_required (VERSION 2.8) #设置最小版本
project(player) #设置工程名
set(target player)
SET(CMAKE_C_COMPILER g++) #设置编译器
set(SRC_LIST #设置源文件
audio_player.c
main.c
)
set(LIB #添加依赖库
-lavformat -lavcodec -lavformat -lavutil -lswresample -lswscale
-lSDL2 -lSDL2main -lm
-lpthread -lz
)
add_definitions( #添加编译选项
-g -w
)
INCLUDE_DIRECTORIES( #添加头文件目录 相当于gcc的-I
/usr/local/include/
)
LINK_DIRECTORIES( #添加库文件目录 相当于gcc的-L
/usr/local/lib/
)
add_executable(${target} ${SRC_LIST}) #生成可执行文件
target_link_libraries(${target} ${LIB}) #添加依赖
执行:
mkdir build cmake会生成临时文件,所以创建一个目录
cd build
cmake ..
-G 指定一个makefile生成工具。
二 常用命令
1 添加头文件目录和库文件目录
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])相当于-I
link_directories(directory1 directory2 ...) 相当于-L
2 set 设置变量
set(var "test") 调用${var}即为"test"
3 使用给定的源文件,为工程引入一个可执行文件
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)
4 使用给定的源文件,为工程生成一个库,并添加到工程
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)
5 将dir目录下的所有源文件放到variable变量中
aux_source_directory(<dir> <variable>)
6 查找库文件
find_library(<VAR> name1 [path1 path2 ...])
7 将给定的库链接到一个目标上
target_link_libraries(<target> [item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)
8 为构建添加一个子路径
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
9 为源文件的编译添加选项 如-g -w
add_definitions(-DFOO -DBAR ...)
10 列表操作
list(<cmd> <list> ..)
使用LENGTH选项时,该命令会返回给定list的长度。
使用GET选项时,该命令返回list中所有被index索引的元素构成的list。
使用APPEND选项时,该命令将会在该list之后追加若干元素。
使用FIND选项时,该命令将返回list中指定的元素的索引;若果未找到,返回-1。
使用INSERT选项时,该命令将在list中指定的位置插入若干元素。
使用REMOVE_AT和REMOVE_ITEM选项将会从list中删除一些元素。它们之间的区别是:REMOVE_ITEM删除的是指定的项,而REMOVE_AT删除的是在指定索引处的项。
使用REMOVE_DUPLICATES选项时,该命令将删除list中的重复项。
使用REVERSE选项时,该命令将把list的内容就地前后倒换。
使用SORT选项时,该命令将按字母序对list总的内容就地排序。
cmake_minimum_required 设置一个工程所需要的最低CMake版本。
set_target_properties 设置目标的一些属性来改变它们构建的方式
file 文件操作命令
find_file 查找一个文件的完整路径
find_path 搜索包含某个文件的路径
math 数学表达式
project 项目名称
message([-] "message") 输出[STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
option 为用户提供一个可选项
string 字符串操作函数
unset 撤销对一个变量
三 条件
比较条件见http://www.cnblogs.com/coderfenghc/archive/2012/07/29/2614253.html
if(expression)
#
elseif(expression)
#
else(expression)
#
endif(expression)
四 循环
1 foreach
(1)
set(mylist "a" "b" c "d")
foreach(_var ${mylist})
message("当前变量是:${_var}")
endforeach()
(2)
foreach(_var RANGE 0 100)
math(EXPR result "${result}+${_var}")
endforeach()
2 while
while(condition)
COMMAND1(ARGS ...)
...
endwhile(condition)
while与endwhile之间的命令将被记录但不执行。当endwhile中的condition为真时才执行
五 宏和方法
1 宏
macro( [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
...
endmacro()
eg.
macro(sum outvar)
set(_args ${ARGN})
set(result 0)
foreach(_var ${_args})
math(EXPR result "${result}+${_var}")
endforeach()
set(${outvar} ${result})
endmacro()
sum(addResult 1 2 3 4 5)
ARGN系统变量,指代入宏中多余的参数,即12345
addResult即outvar,可以得到最后的结果
2 方法
function(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
...
endfunction(<name>)
与宏类似,宏中的变量是全局的,方法中的是局部的,宏中的结果可以直接传递出来,方法不方便
六 常量
CMAKE_CACHEFILE_DIR 文件CMakeCache.txt所在的路径
CMAKE_C_COMPILER 指定C编译器
CMAKE_CXX_COMPILER c++
EXECUTABLE_OUTPUT_PATH 可执行文件的输出路径
小例子:
cmake_minimum_required (VERSION 2.8) #设置最小版本
project(player) #设置工程名
set(target player)
SET(CMAKE_C_COMPILER g++) #设置编译器
set(SRC_LIST #设置源文件
audio_player.c
main.c
)
set(LIB #添加依赖库
-lavformat -lavcodec -lavformat -lavutil -lswresample -lswscale
-lSDL2 -lSDL2main -lm
-lpthread -lz
)
add_definitions( #添加编译选项
-g -w
)
INCLUDE_DIRECTORIES( #添加头文件目录 相当于gcc的-I
/usr/local/include/
)
LINK_DIRECTORIES( #添加库文件目录 相当于gcc的-L
/usr/local/lib/
)
add_executable(${target} ${SRC_LIST}) #生成可执行文件
target_link_libraries(${target} ${LIB}) #添加依赖
执行:
mkdir build cmake会生成临时文件,所以创建一个目录
cd build
cmake ..
make
中文翻译:http://www.cnblogs.com/coderfenghc/tag/cmake/