CMake 基本用法

1. 最基本的CMakeLists 文件
# 它将 main.c 编译为 hello 的可执行文件
PROJECT (HELLO)    # 项目名称
SET(SRC_LIST main.c)   # 源文件
ADD_EXECUTABLE(hello ${SRC_LIST})  # 可执行文件

Cmake 是强烈推荐外部编译的,内部编译会生成一些无法自动删除的中间文件。使用 cmake [CMakeLists.txt path] 进行编译,会生成Makefile等文件,在此执行 make, 即可生成可执行文件。

2. 添加子文件

可以使用ADD_SUBDIRECROTY(source_dir [binary_dir][EXCLUDE_FROM_ALL])来添加下一层的 CMakeLists.txt, 并指定目录.


ADD_SUBDIRECTORY(src bin) # 将 src目录编译为 bin 目录

另外可以都可以通过 SET 指令重新定义 EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量来指定最终的目标二进制的位置(指最终生成的 hello 或者最终的共享库,不包含编译生成的中间文件)

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
3. 使用目标文件的安装:
  • 目标文件的安装

    INSTALL(TARGETS myrun mylib mystaticlib
       RUNTIME DESTINATION bin  # 可执行二进制库
       LIBRARY DESTINATION lib  # 动态库
       ARCHIVE DESTINATION libstatic  # 静态库
    )
  • 普通文件的安装

    INSTALL(FILES README DESTINATION share)
  • 目录的安装

    INSTALL(DIRECTORY icons scripts/ DESTINATION share/myproj)  
    
    # icons 文件夹 scripts 目录下的所有文件
    

如果你要直接安装到系统,可以使用如下指令:

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
4. 添加库
   ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
   # SHARED,动态库
   # STATIC,静态库
   # MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待
   # 更新库版本号
   SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1) 
   # VERSION 指代动态库版本,SOVERSION 指代 API 版本
5. 使用外部共享库和头文件
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...) # 添加头文件包含路径
TARGET_LINK_LIBRARIES(target library1 library2...) # 为 target 添加共享库
6. 其它
  • 设置最小的CMake 版本

    cmake_minimum_required(VERSION 3.1.0)
  • 限定使用 C++11

    
    # Use C++11
    
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    message(STATUS "C++11 support has been enabled by default.")
  • 常见的变量

    CMAKE_CURRENT_SOURCE_DIR  # 当前 CMakeLists 所在路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值