CMake

3 篇文章 0 订阅

基本

编译为可执行文件
add_executable(文件名, 源文件列表)

编译为库
add_library(文件名, 源文件列表)

附加include目录
include_directoies

链接库
target_link_libraries(文件名 库名列表)

添加子项目
add_subdirectory(目录名)

可以将一些配置信息写入CMakeFiles.txt, cmake时生成一个config.h, 然后由源码引用

  1. 编写 config.h.in
#define MAJOR_VERSION @MAJOR_VERSION@
#define MINOR_VERSION @MINOR_VERSION@
  1. 编写CMakeLists.txt
# 设置变量
set(MAJOR_VERSION 1)
set(MINOR_VERSION 0)
# 指定config文件生成, 默认生成到了cmake的输出目录
configure_file(config.h.in config.h)
# 将cmake的输出目录包含进来
include_directories(${PROJECT_BINARY_DIR})
  1. 源码中引用 config.h
#include <iostream>
#include <config.h>
int main(){
	std::cout<<"show me:"<<MAJOR_VERSION<<"."<<MINOR_VERSION<<std::endl;
}

选项 option

用于制造一些选项, 然后在CMake的GUI界面作为开关, CMakeLists.txt中可以用if来判断

  1. 在CMakeLists.txt中定义option,并设定描述和初始值(ON / OFF)
option(USE_OPENGL, "use opengl graphics function to draw", ON)
  1. 在CMakeLists.txt中只有if来判断是否开启
if (USE_OPENGL)
	......
endif(USE_OPENGL)
  1. 若要在c++代码中使用USE_OPENGL这个宏,
    • 需要在 configure_file 语句前定义 option
    • 需要在config.h.in 中用 #cmakedefine 来标记这个宏
      #cmakedefine USE_OPENGL
      之后, 才能在c++文件中使用它
#ifdef USE_OPENGL
	#include <gl/gl.h>
#endif

注:
如果是ON, 配置出的config.h 中 就是

#define USE_OPENGL

如果是OFF, 配置出的config.h中就是

/* #undef USE_OPENGL */

添加子项目

  1. 子项目的文件夹的根目录下要有 CMakeLists.txt, 该文件中无需再定义 cmake_minimun_requird 和 project
add_library(lib1 lib1.cpp)
  1. 在主工程的CMakeLists.txt中使用add_subdirectory(子工程的目录名)
add_subdirectory(lib1)
  1. cmake时 会为子工程也生成makefile,由主工程的makefile自动调动

安装

  1. 安装头文件, 需要放在CMakeLists.txt的最后
    install (
    FILES 头文件列表
    DESTINATION include
    )
  2. 安装目标二进制文件, 需要放在CMakeLists.txt的最后
    install (
    TARGETS 目标文件列表
    DESTINATION bin
    )
  3. 执行make后, 执行 make install 就能安装, 如遇权限问题就需要执行 sudo make install
  4. cmake的变量 CMAKE_INSTALL_PREFIX 标识安装目录, linux默认貌似是在 /usr/local/下

Ubuntu install latest CMake version

download a .sh file from https://cmake.org/download/
sudo sh cmake-3.18.3-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值