CMake

基本

编译为可执行文件
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 
#include 
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 
#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/下

你可能感兴趣的:(cmake,C++)