当前位置: 首页 > news >正文

CMake:构建时为特定目标运行自定义命令

CMake:构建时为特定目标运行自定义命令

  • 导言
  • 项目结构
  • 相关源码
  • 结果

导言

add_custom_command 是 CMake 中用于添加自定义构建规则的命令,通常用于在编译项目时执行一些自定义操作,例如生成文件、运行脚本等。

项目结构

.
├── CMakeLists.txt
├── generate_config.cmake
└── main.cpp

项目地址:

https://gitee.com/jiangli01/tutorials/tree/master/cmake-tutorial/chapter5/03

相关源码

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)project(test_command)# 设置需要生成的头文件的路径
set(CONFIG_HEADER ${CMAKE_BINARY_DIR}/config.h)# 添加一个自定义命令来生成头文件
add_custom_command(OUTPUT ${CONFIG_HEADER}COMMAND ${CMAKE_COMMAND}-DOUTPUT_FILE=${CONFIG_HEADER}-P ${CMAKE_CURRENT_SOURCE_DIR}/generate_config.cmakeCOMMENT "Generating config.h"
)# 将生成的头文件的路径添加到包含目录
include_directories(${CMAKE_BINARY_DIR})# 添加可执行文件
add_executable(test_app main.cpp)# 将自定义命令的输出文件添加为依赖项
add_dependencies(test_app config_h_target)# 定义一个自定义目标以便其他目标可以依赖它
add_custom_target(config_h_target DEPENDS ${CONFIG_HEADER})# 将自定义目标添加到 ALL 阶段,以确保在每次构建时都生成 config.h
add_dependencies(test_app config_h_target)

generate_config.cmake

# 你可以在这里定义所需的宏
set(APP_NAME "TJUApp")
set(APP_VERSION "1.0.0")
set(DEBUG_MODE 1)# 生成 config.h 头文件
file(WRITE ${OUTPUT_FILE} "#ifndef CONFIG_H\n")
file(APPEND ${OUTPUT_FILE} "#define CONFIG_H\n")
file(APPEND ${OUTPUT_FILE} "\n")# 添加宏定义
file(APPEND ${OUTPUT_FILE} "#define APP_NAME \"${APP_NAME}\"\n")
file(APPEND ${OUTPUT_FILE} "#define APP_VERSION \"${APP_VERSION}\"\n")if (DEBUG_MODE)file(APPEND ${OUTPUT_FILE} "#define DEBUG_MODE 1\n")
else ()file(APPEND ${OUTPUT_FILE} "#define DEBUG_MODE 0\n")
endif ()# 结束文件
file(APPEND ${OUTPUT_FILE} "\n#endif\n")
#include <iostream>
#include "config.h"
int main() {
#ifdef DEBUG_MODEstd::cout << "DEBUG_MODE: " << DEBUG_MODE << std::endl;
#endifreturn 0;
}

结果

mkdir build & cd build
cmake ..
make

在这里插入图片描述

DEBUG_MODE: 1

最后,祝大家变得更强!!!

http://www.lryc.cn/news/213693.html

相关文章:

  • 基于适应度相关算法的无人机航迹规划-附代码
  • jmeter BeanShell预处理程序:报错Error invoking bsh method: eval...
  • 使用springboot对Elasticsearch 进行索引的增、删、改、查
  • Project#2: Extendible Hash Index
  • Emscripten + CMakeLists.txt 将 C++ 项目编译成 WebAssembly(.wasm)/js,并编译 Html 测试
  • MATLAB中preparets函数用法
  • ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南续篇
  • react官网
  • 前端css介绍
  • MySql创建索引
  • 前后端分离vue+springboot家庭理财账单财务管理系统
  • LeetCode:2003. 每棵子树内缺失的最小基因值(C++)
  • React Hooks之useContext使用
  • 多模态对比语言图像预训练CLIP:打破语言与视觉的界限
  • 使用s3cmd访问S3存储 -【真实案例】
  • 51单片机复位电容计算与分析(附带Proteus电路图)
  • 前端性能瓶颈崩溃项目?Webpack助力解决!
  • 纷享销客BI,助力企业激活数据价值,科学企业决策
  • SpringBoot整合阿里云OSS对象存储
  • 【ES专题】ElasticSearch快速入门
  • 案例分析真题-质量属性
  • 微信小程序面试题之理论篇
  • C++前缀和算法的应用:统计上升四元组
  • 华泰证券:新奥能源:零售气待恢复,泛能与智家仍是亮点
  • FPGA与ASIC有什么差异?二者该如何选用?
  • Kotlin run 用法
  • iZotope RX 10(音频修复和增强工具)
  • MES 价值点之数据追随
  • yolo8制作自己的数据集训练和预测分割
  • 分享一下怎么做一个同城配送小程序