首页 > 其他分享 >cmake

cmake

时间:2022-10-21 19:36:41浏览次数:44  
标签:OFF LIBRARY sources library world cmake

运行cmake

$ mkdir -p build

$ cd build         # 创建新目录并切换工作目录
$ cmake ..         # 指定 CMakeLists.txt 位置,会生成大量cmake中间文件在当前工作目录下

# 以上两条也可换位这一条命令
$ cmake -H. -Bbuild  # -H. 表示当前目录中搜索根CMakeLists.txt文件。-Bbuild告诉CMake在一个名为build的目录中生成所有的文件。

$ cmake --build .  # 构建示例项目,在cmake的中间文件目录

cmake --build . --target help # 查看能够生成的所有目标文件
cmake --build . --target <target-name>
常见 target-name 有:
    all(或Visual Studio generator中的ALL_BUILD)是默认目标,将在项目中构建所有目标。
    clean,删除所有生成的文件。
    rebuild_cache,将调用CMake为源文件生成依赖(如果有的话)。
    edit_cache,这个目标允许直接编辑缓存。
    test(或Visual Studio generator中的RUN_TESTS)将在CTest的帮助下运行测试套件。我们将在第4章中详细讨论测试和CTest。
    install,将执行项目安装规则。
    package,此目标将调用CPack为项目生成可分发的包。
    文件中指定的可执行文件或 .o 等中间目标文件

基本使用

# 使用 main.cpp 生成一个 a.out 可执行文件

# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
    
# project name and language
project(project_name LANGUAGES CXX)
    
add_executable(a.out main.cpp)

生成静态库并连接到程序中

# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

# project name and language
project(recipe-03 LANGUAGES CXX)

# generate a library from sources 自动添加前后缀
add_library(message
  STATIC              # SHARED 对应动态库;OBJECT/MODULE/...
    Message.hpp
    Message.cpp
  )

add_executable(hello-world hello-world.cpp)

# 将静态库 message 链接到可执行程序 hello-world 中
target_link_libraries(hello-world message)

 条件分支语句 与 变量

1ONYEStrueY或非零数,则逻辑变量为true
0OFFNOfalseNIGNORE、NOTFOUND、空字符串,或者以-NOTFOUND为后缀,则逻辑变量为false

# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

# project name and language
project(recipe-04 LANGUAGES CXX)

# introduce a toggle for using a library  创建全局变量,控制下方流程
set(USE_LIBRARY OFF)
# option(USE_LIBRARY "Compile sources into a library" OFF)

# 打印消息
message(STATUS "Compile sources into a library? ${USE_LIBRARY}")

# BUILD_SHARED_LIBS is a global flag offered by CMake to toggle the behavior of add_library
# cmake 内部用此变量决定创建动态或静态库
set(BUILD_SHARED_LIBS OFF)

# 引入新局部变量 _sources 包含两个 Message.hpp Message.cpp
list(APPEND _sources Message.hpp Message.cpp)

if(USE_LIBRARY)
  # add_library will create a static library since BUILD_SHARED_LIBS is OFF
  add_library(message ${_sources})
  add_executable(hello-world hello-world.cpp)
  target_link_libraries(hello-world message)
else()
  add_executable(hello-world hello-world.cpp ${_sources})
endif()

编译时指定变量

option(USE_LIBRARY "Compile sources into a library" OFF) # 变量默认值为 OFF

# $ cmake -D USE_LIBRARY=ON .. 在shell中指定 CMakeLists.txt 时使用 -D 传入变量

选项间依赖情况

include(CMakeDependentOption) # 必须包含此模块 cmake_dependent_option 才可用
# second option depends on the value of the first
# USE_LIBRARY 为真时,MAKE_STATIC_LIBRARY为OFF,否则为 ON
cmake_dependent_option(
    MAKE_STATIC_LIBRARY "Compile sources into a static library" OFF
    "USE_LIBRARY" ON
)

设置执行文件输出目录

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

 

标签:OFF,LIBRARY,sources,library,world,cmake
From: https://www.cnblogs.com/zhh567/p/16814561.html

相关文章

  • Qt Quick 用cmake怎么玩子项目
    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/o-_aGqreuQda-ZmKktvxwA以往在公司开发众多的项目中,都会出现要求本项......
  • FLTK基于cmake编译以及使用(Windows、macOS以及Linux)
    最近因为一些学习的原因,需要使用一款跨平台的轻量级的GUI+图像绘制C/C++库。经过一番调研以后,最终从GTK+、FLTK中选出了FLTK,跨平台、够轻量。本文将在Windows、macOS两套......
  • Configure CMake Compile and Link Options with Generator Expression
    target_compile_options(${PROJECT_NAME}PRIVATE#EnableAllWarnings$<$<CXX_COMPILER_ID:MSVC>:/W4/sdl>$<$<CXX_COMPILER_ID:GNU>:-......
  • centos7 中 升级cmake
     001、(base)[root@pc1build]#cat/etc/redhat-release##系统CentOSLinuxrelease7.6.1810(Core)(base)[root@pc1build]#cmake--version##当前......
  • cmake aux_source_directory
    cmake中的aux_source_directory(.SRC_LIST):将当前文件的所有源文件放进变量SRC_LIST中。使用aux_source_directory的问题:当我们在当前目录下重新添加了新的源文件,但此时......
  • 【AI白身境】只会用Python?g++,CMake和Makefile了解一下
    今天是新专栏《AI白身境》的第六篇,所谓白身,就是什么都不会,还没有进入角色。对于大部分小白来说,因为python用的太爽,以致于或许都没有听说过CMake。python是脚本语言,而当前大......
  • Qt5 使用CMake 添加QtResourceFile(qrc)资源文件和添加QT模块
    Qt:5.12.9添加资源文件CMakeLists.txt .....qt5_add_resources(qrc_FILESResourceFile.qrc)if(ANDROID)add_library(qtGUIDemo2CMake2SHAREDmain.cpp......
  • 用VSCode和CMake编写调试C/C++
    VSCode配置编译任务与调试对象在配置的时候会用到一些vscode的变量,用${}包裹起来的那些。${workspaceFolder}是当前工作空间(或vscode所打开根文件夹)在操作系统中绝对路......
  • CMakeLists.txt中打印所有变量
    一、打印可见变量及其值get_cmake_property(_variableNamesVARIABLES)foreach(_variableName${_variableNames})message(STATUS"${_variableName}=${${_variabl......
  • Cmake命令之find_package介绍
    一、搜索模式find_package用于查找包(通常是使用三方库),并返回关于包的细节(使用包所依赖的头文件、库文件、编译选项、链接选项等)  与find_libaray直接在指定搜索目录下......