C++ 宏定义

看到一段 C++ 代码,大致是说如果如果定义了 RUN_ALL_TESTS 就执行下面的代码,遂研究了一下。

#if defined(RUN_ALL_TESTS)
    // some code here
#endif

首先 RUN_ALL_TESTS 是定义的宏:

#define RUN_ALL_TESTS    // 空字符串
#define RUN_ALL_TESTS 1  // 赋值为 1

#if defined 为条件编译指令,它并不会考虑宏定义中有没有值。

#if defined(RUN_ALL_TESTS)
    // some code here
#else
    // some other code
#endif

除了在 .cpp 文件中定义,是否有其他方法对 RUN_ALL_TESTS 进行指定呢?可以在编译阶段进行指定:

  • CMakeLists.txt 文件中进行指定

    • add_definitions(-DRUN_ALL_TESTS) 或者 add_definitions(-DRUN_ALL_TESTS=1)

    • add_definitions已经逐渐被弃用,更推荐使用目标明确的 target_compile_definitions

      add_executable(my_target test.cpp)
      target_compile_definitions(my_target PRIVATE RUN_ALL_TESTS)
      
  • 在编译时 cmake -DRUN_ALL_TESTS=1 .
    (我测试时 cmake -DRUN_ALL_TESTS= . 不起作用,即必须赋值)

  • 在编译时 g++ -D RUN_ALL_TESTS myfile.cpp -o myfile

posted @ 2023-07-03 19:02  BuckyI  阅读(25)  评论(0编辑  收藏  举报