CMake:自定义与预定义宏(七)

本文介绍了如何在C++程序中使用自定义宏进行调试控制,以及如何在CMake中通过`add_definitions`来植入预定义宏。通过例子展示了不同宏定义对代码执行的影响。
摘要由CSDN通过智能技术生成
1、自定义宏

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

#include <iostream>
#define NUMBER 5
int main()
{
    int a = 10, b = 2;
#ifdef DEBUG
    std::cout << "这是一行调试信息";
#ifdef MAXN
    std::cout << ", MAXN = " << MAXN;
#else
    std::cout << ", MAXN没有被定义";
#endif
    std::cout << std::endl;
#endif
    for(int i = 0;i < NUMBER;i++){
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
  • 在程序中对DEBUG宏进行判断:

    • 如果该宏被定义了,那么会进行调试输出
    • 如果没有定义这个宏,这段代码就相当于被注释掉了,因此最终无法看到日志输出
  • 为了让测试更灵活,我们可以不再代码中定义这个宏,而是在测试的时候去把它定义出来,其中就可以通过g++/gcc命令去指定

    g++ main.cpp -o main -DDEBUG -DMAXN=5
    
    • -D:表示植入宏
      • DEBUG:宏名字
      • MAXN:宏名字,=5表示植入该宏的值

在CMake中我们也可以做类似的事情,对应的命令叫做add_definitions

# add_definitions(-D宏名称1 -D宏名称2=宏值)
cmake_minimum_required(VERSION 3.10.2)
set(CMAKE_CXX_STANDARD 14)
project(test)

# 植入DEBUG宏
add_definitions(-DDEBUG)

# 植入MAXN宏
add_definitions(-DMAXN=10)

add_executable(main main.cpp)

# 输出
# 只植入DEBUG宏
# 这是一行调试信息, MAXN没有被定义
# 0 1 2 3 4 

# 只植入MAXN宏或者不植入
# 0 1 2 3 4 

# 植入DEBUG宏、MAXN宏
# 这是一行调试信息, MAXN = 10
# 0 1 2 3 4 
2、预定义宏

常用的CMake内置宏

常用的CMake宏变量含义
CMAKE_PROJECT_NAME当前项目的名称
PROJECT_NAME最近通过project()命令激活的项目名称。
CMAKE_C_COMPILERC编译器的完整路径
CMAKE_CXX_COMPILERC++编译器的完整路径
CMAKE_BUILD_TYPE指定构建类型(比如Release或Debug)
CMAKE_SOURCE_DIR项目的顶层源目录
CMAKE_CURRENT_SOURCE_DIR当前处理的CMakeLists.txt所在的目录
CMAKE_BINARY_DIR项目的顶层构建目录
CMAKE_CURRENT_BINARY_DIR当前处理的CMakeLists.txt对应的构建目录
CMAKE_INSTALL_PREFIX安装目录前缀
CMAKE_MODULE_PATH指定额外的CMake模块搜索路径
CMAKE_PREFIX_PATH用于查找库文件的路径前缀
编译器和工具设置
CMAKE_C_FLAGSC编译器的命令行选项
CMAKE_CXX_FLAGSC++编译器的命令行选项
CMAKE_VERBOSE_MAKEFILE如果为TRUE,构建过程将显示更多的信息
项目宏
PROJECT_SOURCE_DIR包含最顶层CMakeLists.txt文件的目录,即项目的源代码根目录
PROJECT_BINARY_DIR项目的构建目录,如果是外部构建,这将与CMAKE_BINARY_DIR不同
PROJECT_VERSION通过project()命令设置的项目版本
PROJECT_VERSION_MAJOR项目的主版本号
PROJECT_VERSION_MINOR项目的次版本号
PROJECT_VERSION_PATCH项目的补丁版本号
PROJECT_VERSION_TWEAK项目的微调版本号(如果指定)
PROJECT_DESCRIPTION项目的描述信息(需要CMake 3.9及以上版本)
PROJECT_HOMEPAGE_URL项目的主页URL(需要CMake 3.12及以上版本)
系统信息
CMAKE_SYSTEM系统名称,例如Linux-5.4.0-150-generic
CMAKE_SYSTEM_NAME不包含版本的系统名称,如Linux、Windows
CMAKE_SYSTEM_PROCESSOR目标系统的处理器架构,例如x86_64

以上只是一些常见的宏的具体的使用手册,还有一些宏可能没有列举出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值