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

Assignment_operator

我正在处理一个现有项目,并为此清理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为条件的那一部分代码之外没有做任何事情。

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

弗朗西斯

您可以这里一样结合optionadd_definitions做客由于一个简单的示例比长文本更清晰,因此这里有一个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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章