CMake - 将选项集成到C ++源文件中

时间:2014-07-09 20:36:03

标签: c++ cmake c-preprocessor configure

我正在使用现有项目并清理CMake。但是,现在我对如何将CMake选项集成到实际源代码中感到有点困惑。

为了简单起见,假设我只想在cout << "print";内执行一段代码,假设example.cpp,如果在CMake上,将值ENABLE_PRINT设置为ON

项目目录如下所示: folder layout

使用上面的例子,我做了以下事情:

  1. 父项目 CMakeLists.txt上,我添加了OPTION( ENABLE_PRINT "Enable Print" ON)
  2. 然后,在示例子项目源文件夹 Config.h文件中,我添加了#define ENABLE_PRINT
  3. 示例子项目中的Config.h.in上,我添加了#cmakedefine ENABLE_PRINT
  4. 最后,在源文件example.cpp上,我在cout << "print";#ifdef ENABLE_PRINT
  5. 内圈了#endif

    进行这些更改后,项目将配置并生成就好了。但是,当我制作软件时,它会出错并且基本上告诉我,我用#ifdef包围的代码块根本没有被执行;它被忽略了。换句话说,我采取的上述步骤没有做任何事情,除了“注释掉”我希望以ENABLE_PRINT为条件的代码块。

    那么,我将如何使这项工作?

1 个答案:

答案 0 :(得分:7)

您可以将optionadd_definitions组合在一起,例如here。由于一个简单的例子比一个长文本更清楚,这里有一点main.c:

 #include<stdio.h>

 int main(int argc, char *argv[])
 {
   printf("start\n");
   #ifdef USE_DEBUG
     printf("Using debug\n");
   #endif
   printf("end\n");
   return 0;
 }

CMakeLists.txt是:

cmake_minimum_required (VERSION 2.6)
project (HELLO) 

option(WITH_DEBUG "Use debug" OFF)

if (WITH_DEBUG)
  MESSAGE(STATUS "WITH_DEBUG")
  add_definitions(-DUSE_DEBUG)
endif()

add_executable (main main.c) 

您可以输入cmake .cmake . -DWITH_DEBUG=ON然后make./main

来尝试