CMake学习
CMake 最低版本号
cmake_minimum_required(VERSION 2.8)
项目信息
project(main)
添加版本号
set (main_VERSION_MAJOR 1)
set (main_VERSION_MINOR 0)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
是否使用自己的库
option(USE_MYMATH
"USE provided math implementation" ON)
检查系统环境 必须放在configure_file命令前
include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
check_function_exists (pow HAVE_POW)
加入一个配置头文件,用于处理CMake对源码的设置
$前面加"可以使用目录名中间有空格
configure_file(
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
是否加入MathFunctions库
if(USE_MYMATH)
# 设置头文件
include_directories("${PROJECT_SOURCE_DIR}/math")
# 添加子目录目录
add_subdirectory(math)
# 设置库名
set (EXTAR_LIB ${EXTAR_LIB} MathFunctions)
endif(USE_MYMATH)
查找当前目录下的所有源文件
将名称保存到DIR_SRCS变量
aux_source_directory(. DIR_SRCS)
指定生成目标
add_executable(main_cmake ${DIR_SRCS})
添加链接库
target_link_libraries(main_cmake ${EXTAR_LIB})
指定安装路径
install (TARGETS main_cmake DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/config.h" DESTINATION include)
启用测试
enable_testing()
测试程序是否成功运行
add_test (test_run main_cmake 5 2)
测试帮助信息是否可以正常提示
add_test (test_usage main_cmake)
set_tests_properties (test_usage PROPERTIES PASS_REGULAR_EXPRESSION "Usage: .* base exponent")
测试 5 的平方
add_test (test_5_2 main_cmake 5 2)
set_tests_properties (test_5_2 PROPERTIES PASS_REGULAR_EXPRESSION "is 25")
测试 10 的 5 次方
add_test (test_10_5 main_cmake 10 5)
set_tests_properties (test_10_5 PROPERTIES PASS_REGULAR_EXPRESSION "is 100000")
# 测试 2 的 10 次方
add_test (test_2_10 main_cmake 2 10)
set_tests_properties (test_2_10 PROPERTIES PASS_REGULAR_EXPRESSION "is 1024")
# 定义一个宏,用来简化测试工作
macro (do_test arg1 arg2 result)
add_test (test_${arg1}_${arg2} main_cmake ${arg1} ${arg2})
set_tests_properties (test_${arg1}_${arg2} PROPERTIES PASS_REGULAR_EXPRESSION ${result})
endmacro (do_test)
使用该宏进行一系列的数据测试
do_test (5 2 "is 25")
do_test (2 10 "is 1024")
do_test (10 5 "is 100000")
支持gdb 让CMake 支持gdb的设置也很容易,只需要指定Debug模式下开启-g选项
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS "-Wall -Wextra -pthread")
生成安装包
构建一个 CPack 包
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "${main_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${main_VERSION_MINOR}")
include (CPack)