8. 宏定义

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 目录进行的构建,那么得到的就是这个目录的路径
posted @ 2024-07-15 10:43  kobayashilin1  阅读(10)  评论(0编辑  收藏  举报