首页 > 其他分享 >8. 宏定义

8. 宏定义

时间:2024-07-15 10:56:03浏览次数:10  
标签:CMAKE 定义 -- CXX Detecting main compiler

8. 宏定义

在进行程序测试的时候,我们可以在代码中添加一些宏定义,通过这些宏来控制这些代码是否生效。

如下所示,新建一个文件 test.cpp

#include <iostream>

int main() {
  int num = 42;

#ifdef DEBUG
  std::cout << "这是一个DEBUG信息" << '\n';
#endif

      std::cout << num << '\n';

  return 0;
}

我们编译时候加上我们定义了的宏:

 g++ -Wall -DDEBUG main.cpp -o main

然后运行:

./main
这是一个DEBUG信息
42

在 CMake 中也有这种功能:

add_definitions(-D宏名称1 [<-D宏名称2> ...])

刚才的 main.cpp 代码所在的工程目录结构:

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

0 directories, 2 files

我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.17)

project(M_DEBUG_TEST)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_COMPILER g++)

file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

add_definitions(-DDEBUG)

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)

add_executable(main ${SRC})

编译运行:

mkdir build && cd build

cmake ..
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yuzu/cmake_proj/proj7/build

make
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable ../bin/main
[100%] Built target main

../bin/main
这是一个DEBUG信息
42

要在使用 cmake 构建环境的时候启用代码中定义的宏,可以在 CMakeLists.txt 中添加相关的宏定义,然后直接构建。

预定义的宏

功能
PROJECT_SOURCE_DIR 最近一次调用 project 的 CMakeLists.txt 所在的源码目录
PROJECT_BINARY_DIR 执行 cmake 命令的目录
CMAKE_CURRENT_SOURCE_DIR 当前处理的 CMakeLists.txt 所在的路径
CMAKE_CURRENT_BINARY_DIR target 编译目录
EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置
CMAKE_PROJECT_NAME 返回通过 PROJECT 指令定义的项目名称
CMAKE_BINARY_DIR 项目实际构建路径,假设在 build 目录进行的构建,那么得到的就是这个目录的路径

标签:CMAKE,定义,--,CXX,Detecting,main,compiler
From: https://www.cnblogs.com/kobayashilin1/p/18302670

相关文章

  • 分别给【测试计划】、【线程组】、【取样器】设置配置元件--用户定义的变量,发送请求,生
    在jmeter中,测试计划、线程组、取样器都可以添加配置元件---用户定义的变量,那么我们在实际发送请求的时候,使用的是哪个变量呢?使用的是取样器定义的变量1.测试计划2.线程组3.取样器发送请求,使用的accounts的值为取样器的apitest21jmeter寻找变量的顺序是:测试计划--->线程......
  • 【Bug】拓展方法必须在非泛型静态类中定义
    原文链接:https://blog.csdn.net/weixin_44231544/article/details/121752347原: 修改: 拓展方法1.定义:(1)扩展方法能使你能够向现有类型添加“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。(2)扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例......
  • BottomNavigationView + ViewPager2 实现底部导航栏切换 + 自定义渐变
    com.google.android.material.bottomnavigation.BottomNavigationView缺点:自定义难度大:BottomNavigationView的默认样式和行为是为标准使用场景设计的,如果需要进行深度定制,比如复杂的动画效果或不常见的布局,可能需要大量的代码来实现。图标和文字的限制:默认情况下......
  • vue学习day09-自定义指令、插槽
    29、自定义指令(1)概念:自己定义的指令,可以封装一些dom操作,扩展额外的功能。(2)分类:1)全局注册2)局部注册3)示例:让表单元素一进入页面就获取焦点①全局注册效果:②局部注册(效果和全局注册一样,但作用范围不同)(3)指令的值自定义指令可以通过等号赋值的形式传参,这个值......
  • 图——图的类型定义及存储结构
    在上篇文章我们学习了图的定义和基本术语,大家可以通过下面的链接学习:图的定义及基本术语这篇文章我们就来系统的学习一下图的类型定义和存储结构。案例引入:六度空间理论:你和任何一个陌生人之间所间隔的人不会超过6个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人......
  • 华为云obs如何配置自定义域名
    上传pdf文件到华为云obs上后,得到的链接,如果直接访问都是下载文件,那么要如何实现访问链接直接预览文件呢。通过查看华为云的官方文档得知从2022年开始,华为云就不在支持直接访问实现预览了如何在浏览器中在线预览OBS中的对象?_对象存储服务OBS基于安全合规要求,华为云对象存储......
  • Python函数(1)--自定义函数与作用域
    函数的定义Python中的函数是一段组织好的、可重复使用的、用来实现单一或相关联功能的代码块。函数能提高应用的模块性,和代码的重复可用性。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被称为用户自定义函数。自定义函数假设,我们现在求一......
  • 面向1-类和对象-方法、new的定义和使用
    面向对象编程OOP面向面向对象和面向过程面向对象oop-分类的思维方式-本质——以类的方式组织代码,以对象的组织(封装)数据抽像+封装+继承+多态认识上-先有对象(具体的事物)再有类(对对象的抽象)代码上-先有对象再有类(类是对象的模板)面向过程-线性步骤分析方式类-描绘一系列事物的......
  • css 自定义属性
    CSS自定义属性(CustomProperties),也称为CSS变量,是CSS中一种能够保存和复用值的机制。它们与常规的CSS属性不同,因为它们可以在整个文档中定义一次,然后在需要的任何地方使用。定义和语法定义一个自定义属性使用两个连字符(--)开头,后面跟着属性名,类似于下面的示例::root{--......
  • 易优CMS模板标签assign定义变量模板文件中定义变量,可在其他标签里使用该变量
    【基础用法】标签:assign描述:模板文件中定义变量,可在其他标签里使用该变量用法:{eyou:assignname='typeid'value='5'/}文件:无涉及表字段:name=''变量名value=''赋给变量名的值底层字段:无 【更多示例】-------------------------------示例1----------------------......