CMake

常用语句

*************************************************************************************************
#基本命令

#设置最低cmake版本
cmake_minimum_required (VERSION 2.8)

#设置项目信息
project (Demo1)

# 添加子目录
add_subdirectory(path)

#搜索目录下的文件,创建一个集合
aux_source_directory(<dir> <variable>)

#手动添加文件集合
set( SRC_LIST ./main.c ./testFunc1.c ./testFunc.c)

#建立可执行文件
add_executable(hello-world#可执行文件 hello-world.cpp#包含的源码)
add_executable(Demo ${DIR_SRCS})

*************************************************************************************************

#链接库

#添加头文件搜索路径
include_directories (test_func#路径1 test_func1#路径2)

#添加非标准的共享库搜索路径
link_directories

#生成新的库
add_library(message#库的名字 
	STATIC#动态还是静态 
	Message.hpp Message.cpp#生成库的源文件)

#将目标库连接到可执行文件目标
target_link_libraries(helo-world#可执行文件 message#要添加的库)

#设置可执行文件存放路径
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

#设置库存放路径
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#设置输出的名称,还有其它功能,如设置库的版本号等等
set_target_properties

*************************************************************************************************

#编译选项

#加入一个配置头文件,用于处理 CMake 对源码的设置
configure_file (
	"${PROJECT_SOURCE_DIR}/config.h.in"
	"${PROJECT_BINARY_DIR}/config.h"
  )

#添加控制选项
option(MYDEBUG#option名称 
	"enable debug compilation"#字符串,编译时提示option功能 
	OFF)

#if语句
if (MYDEBUG)
	add_executable(main2 main2.c)
else()
	message(STATUS "Currently is not in debug mode")    
endif()

//cpp文件中的选项
#ifdef USE_MYMATH
	#include "math/MathFunctions.h"
#else
	#include <math.h>
#endif

//config.h.in
//CMake 会自动根据 CMakeLists 配置文件中的设置
//自动生成 config.h 文件
#cmakedefine USE_MYMATH

*************************************************************************************************

#安装和测试

# 指定 MathFunctions 库的安装路径
install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)

# 指定安装路径
install (TARGETS Demo DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/config.h" DESTINATION include)

#生成的 Demo 文件和 MathFunctions 函数库 libMathFunctions.o 文件
#将会被复制到 /usr/local/bin 中
#而 MathFunctions.h 和生成的 config.h 文件则会被复制到 /usr/local/include 中。

*************************************************************************************************

#为工程添加测试

# 启用测试
enable_testing()

# 测试程序是否成功运行
add_test (test_run Demo 5 2)

# 测试帮助信息是否可以正常提示
add_test (test_usage Demo)
set_tests_properties (test_usage
  PROPERTIES PASS_REGULAR_EXPRESSION "Usage: .* base exponent")

# 测试 5 的平方
add_test (test_5_2 Demo 5 2)

set_tests_properties (test_5_2
 PROPERTIES PASS_REGULAR_EXPRESSION "is 25")

#命令行中测试功能的用法
[ehome@xman Demo5]$ make test

#宏定义
macro (do_test arg1 arg2 result)
  add_test (test_${arg1}_${arg2} Demo ${arg1} ${arg2})
  set_tests_properties (test_${arg1}_${arg2}
    PROPERTIES PASS_REGULAR_EXPRESSION ${result})
endmacro (do_test)

*************************************************************************************************

#版本号

#添加版本号
set (Demo_VERSION_MAJOR 1)
set (Demo_VERSION_MINOR 0)

#为了在代码中获取版本信息,我们可以修改 config.h.in 文件,添加两个预定义变量
#define Demo_VERSION_MAJOR @Demo_VERSION_MAJOR@
#define Demo_VERSION_MINOR @Demo_VERSION_MINOR@

*************************************************************************************************

#添加环境检查

#顶层cmake
# 检查系统是否支持 pow 函数
include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
check_function_exists (pow HAVE_POW)

//config.h.in
//does the platform provide pow function?
#cmakedefine HAVE_POW

//main.cpp
#ifdef HAVE_POW
    printf("Now we use the standard library. \n");
    double result = pow(base, exponent);
#else
    printf("Now we use our own Math library. \n");
    double result = power(base, exponent);
#endif


*************************************************************************************************

#生成安装包

# 构建一个 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)
#导入 InstallRequiredSystemLibraries 模块,以便之后导入 CPack 模块;
#设置一些 CPack 相关变量,包括版权信息和版本信息,其中版本信息用了上一节定义的版本号;
#导入 CPack 模块。

#命令行中生成安装包
#生成二进制安装包
cpack -C CPackConfig.cmake

#生成源码安装包
cpack -C CPackSourceConfig.cmake

*************************************************************************************************

#定义

#目标二进制可执行文件的存放位置
EXECUTABLE_OUTPUT_PATH

#工程的根目录
PROJECT_SOURCE_DIR

#库文件的默认输出路径,这里设置为工程目录下的lib目录
LIBRARY_OUTPUT_PATH

#用来测试输出是否包含后面跟着的字符串
PASS_REGULAR_EXPRESSION

*************************************************************************************************

Reference

Major

CMake官网

超详细的cmake教程

CMake 入门实战

Linux下CMake简明教程

CMake Cookbook

Details

cmake 添加头文件目录,链接动态、静态库

link_directories, LINK_LIBRARIES, target_link_libraries使用总结

linux编译动态库 fPIC作用

关于-fPIC, -fpic, -fpie, -fPIE的一点理解

CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的区别

cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别)

cmake中宏的使用

cmakelists.txt的多行注释

CMake详解之ExternalProject

Install

cmake:指定install的安装目录

【CMake】cmake的install指令

Find Package

Cmake之深入理解find_package()的用法

cmake教程4(find_package使用)

CMake之find_package

Debian

cmake制作deb包

利用cmake打deb包

用CMake 打包 deb包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值