在 Linux 下用 C++ 配置宏(Macro),常见有几种方式,下面从编译期宏定义、CMake 配置、Makefile 配置、以及条件编译示例几个方面说清楚。
-D 定义宏g++ main.cpp -o main -DMY_MACRO
等价于代码里:
#define MY_MACRO
g++ main.cpp -o main -DVERSION=2
等价于:
#define VERSION 2
g++ main.cpp -o main -DNAME=\"linux\"
C++ 中:
#define NAME "linux"
#include <iostream>
int main() {
#ifdef MY_MACRO
std::cout << "MY_MACRO enabled" << std::endl;
#endif
#if VERSION == 2
std::cout << "Version 2" << std::endl;
#endif
return 0;
}
CXX = g++
CXXFLAGS = -Wall -DMY_MACRO -DVERSION=3
target: main.cpp
$(CXX) main.cpp -o main $(CXXFLAGS)
运行:
make
add_executable(main main.cpp)
target_compile_definitions(main PRIVATE MY_MACRO)
target_compile_definitions(main PRIVATE VERSION=2)
option(USE_FEATURE "Enable feature" ON)
if(USE_FEATURE)
target_compile_definitions(main PRIVATE USE_FEATURE)
endif()
命令行:
cmake -DUSE_FEATURE=OFF ..
// config.h
#pragma once
#define MAX_SIZE 1024
//#define DEBUG_MODE
#include "config.h"
⚠️ 缺点:改宏要重新编译,不灵活
| 场景 | 示例宏 |
|---|---|
| 调试 | DEBUG |
| 平台 | LINUX / WIN32 |
| 版本 | VERSION |
| 功能开关 | ENABLE_LOG |
| 编译优化 | NDEBUG |
g++ -dM -E - < /dev/null
如果你用的是 CMake / Makefile / 具体项目结构,可以贴出来,我可以帮你写最合适的宏配置方案。