繁体   English   中英

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

[英]CMake - integrating options into C++ source files

我正在处理一个现有项目并为其清理 CMake。 但是,现在我对 go 如何将 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 为条件的代码块之外,我采取的上述步骤没有做任何事情。

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

您可以像这里一样组合cmake的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 . cmake . -DWITH_DEBUG=ON cmake . -DWITH_DEBUG=ON然后make./main

@francis 的回答很好,但是我也建议使用 compile_definitions 而不是 add_definitions 以及为现代 cmake 模块化指定目标:

cmake_minimum_required (VERSION 2.6)
project (HELLO) 

option(WITH_DEBUG "Use debug" OFF)

add_executable (main main.c) 

if (WITH_DEBUG)
  MESSAGE(STATUS "WITH_DEBUG")
  target_compile_definitions(main PRIVATE USE_DEBUG)
endif()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM