CMAKE入门教程

安装

命令行安装
apt-get update && apt-get -y install cmake 
源码安装

版本 3.15.0
地址 https://github.com/Kitware/CMake/releases/tag/v3.15.0
文件包 cmake-3.15.0-Linux-x86_64.sh

在终端执行以下操作

sudo apt remove cmake
chmod +x /opt/cmake-3.15.0-Linux-x86_64.sh
bash /opt/cmake-3.15.0-Linux-x86_64.sh ##出现提示,按y
ln -s /opt/cmake-3.15.0-Linux-x86_64.sh /usr/local/bin
cmake --version

安装成功

实战使用

编写一个打印测试程序,此程序依赖一个自研的动态库,整个项目通过cmake进行编译。
完整demo源码链接:https://github.com/zouyingquan/cmake_sample

cmake_minimum_required(VERSION 3.5)

project(sample)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INSTALL_RPATH "./")
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(CMAKE_INSTALL_RPATH ${CMAKE_CURRENT_SOURCE_DIR}/3rd/lib)


message("print your test message")
message(${CMAKE_INSTALL_PREFIX})

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rd)

#find_library(PRINT_LIB print ${CMAKE_CURRENT_SOURCE_DIR}/3rd/lib)

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rd/lib)

add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)       

target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/3rd/src)
             

target_link_libraries(${PROJECT_NAME} print)
#target_link_libraries(${PROJECT_NAME} ${PRINT_LIB})

INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})

语法

本文根据demo,对cmake的相关语法进行解释,详细的cmake说明请参考官方文档:https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html 不同版本的cmake语法上大同小异,任意选择一个版本学习即可
CMAKE_INSTALL_RPATH : 设置运行是库链接路径(与gcc -rpath 效果一致),在本demo中,libprint.so在${CMAKE_CURRENT_SOURCE_DIR}/3rd/lib这个目录下,如果不设置rpath,则需要把库的绝对路径加入环境变量

message :输出变量值,在复杂的项目中,可以用来调试打印cmake的信息

add_subdirectory : 进入到${CMAKE_CURRENT_SOURCE_DIR}/3rd,根据这个目录下的CMakelist.txt进行编译。通常项目上需要功能模块是分开的,每个模块可以单独编译,可以使用此方法实现项目一步到位编译构建。

target_link_libraries : Specify libraries or flags to use when linking a given target and/or its dependents。指定链接库

编译链接库选项
  • 方法一:find_library This command is used to find a library。示例中,在${CMAKE_CURRENT_SOURCE_DIR}/3rd/lib 中找到libprint.so,PRINT_LIB的值就是libprint.so的绝对路径。
  • 方法二:link_directories Adds the paths in which the linker should search for libraries.添加库的搜索路径。但这里有需要主要的是,要使得这个这个命令生效,需要写在add_executable add_library 这些命令之前。在官方文档中强调了这个命令的使用方式The command will apply only to targets created after it is called。通常link_directories不生效,往往是因为写在了targets之后
安装

cmake提供了安装的操作,将编译出来的目标文件安装到制定目录。INSTALL支持以下操作

install(TARGETS <target>... [...])
install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
install(RUNTIME_DEPENDENCY_SET <set-name> [...])

不同的文件类型建议使用相对应的命令,例如:

  • 安装文件,使用install(FILES )
  • 安装脚本文件,使用install(PROGRAMS) 这将会默认保留文文件原本的权限
  • 安装整个目录,使用install(DIRECTORY )
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值