编译格式和编译工具有很多,比如GNU make,qmake,nmake等,cmake是这些make的高层,作用是使用通用格式生成不同平台的make格式。
安装cmkae
# 命令行工具
sudo apt install cmake
# GUI工具,ccmake
sudo apt install cmake-curses-gui
# GUI工具,cmake-gui
sudo apt install cmake-qt-gui
单文件编译
编写CMakeLists.txt文件:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo1)
# 指定生成目标
add_executable(Demo main.cc)
编译:
# 生成编译环境
cmake . -B build
# 编译
cmake --build build
或者 cd build && make .
其他指令:
# 搜索当前目录,并将源文件保存在DIR_SRCS变量中
aux_source_directory(. DIR_SRCS)
# 添加生成的目标文件
add_executable(Demo ${DIR_SRCS})
多文件编译
./Demo3
|
+--- main.cc
|
+--- math/
|
+--- MathFunctions.cc
|
+--- MathFunctions.h
父目录:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo3)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
add_executable(Demo main.cc)
# 添加链接库
target_link_libraries(Demo MathFunctions)
子目录:
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library (MathFunctions ${DIR_LIB_SRCS})
添加编译选项
# 弹出选项
option (USE_MYMATH
"Use provided math implementation" ON)
# 使用选项
if (USE_MYMATH)
include_directories ("${PROJECT_SOURCE_DIR}/math")
add_subdirectory (math)
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
使用ccmake
命令来配置选项。
添加安装目录
install (<二进制1> <二进制2> <安装目录>)
添加测试
add_test (test_run <可执行程序> <参数1> <参数2>)
打包
# 构建一个 CPack 安装包
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE
"${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "${Demo_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${Demo_VERSION_MINOR}")
include (CPack)
cmake .
cpack