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

ass*_*tor 4 c++ configure cmake c-preprocessor

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

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

项目目录如下所示: 文件夹布局

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

  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#endif

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

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

fra*_*cis 7

你可以像这里一样optionadd_definitionscmake 结合起来.由于一个简单的例子比一个长文本更清晰,这里有一点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;
 }
Run Code Online (Sandbox Code Playgroud)

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) 
Run Code Online (Sandbox Code Playgroud)

您可以通过键入尝试cmake .cmake . -DWITH_DEBUG=ON然后make./main