欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Modern CMake

程序员文章站 2022-05-26 15:15:09
...

reference

build system

总结:对于C/C++,推荐用cmake+make或者meson+ninja。

  • cmake/qmake/premake, make +++
  • gnu build system: autotool/autoconf/automake
  • meson/cmake, ninja: meson and ninja is python package +++
  • ant/maven: for java, apache
  • bazel: google, big project https://bazel.build/faq.html +
  • buck: facebook
  • gradel: ant+maven, apache

demo

  • 创建CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(demo)
add_executable(out main.cpp)
  • 创建main.cpp 并执行
mkdir build 
cd build
cmake ..
make 或者 cmake --build .

cmake 功能

CMakeLists实例

  • 包管理
find_package(<name> REQUIRED)
  • 构建编译
add_excutable(<name> <sourcefile>...)
add_library(<name> [SHARED|STATIC|INTERFACE]<sourcefile>...)
add_subdirectory(<dir>)

target_include_directories()
target_sources()
target_link_libraryies()

file(GLOB_RECURSE cpp_samples RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)

  • 测试
    ctest, CDash, gtest
enable_testing()
add_executable()
add_test(<testname> <command> [arg...])
  • 安装
    cpack,生成安装包
# copy files to <dir>
install(FILES|TARGETS <file>... DESTINATION <dir>)

# 导出让其它cmake项目用
install(EXPORT <target> NAMESPACE <name> DESTINATION <dir>)
  • 通用
set(<name> <value>) #设置变量值
unset(<name>) #取消变量
include(<cmake file>) #包含子项目
message(STATUS "hello world") #输出信息