我正在使用现有项目并清理CMake。但是,现在我对如何将CMake选项集成到实际源代码中感到有点困惑。
为了简单起见,假设我只想在cout << "print";
内执行一段代码,假设example.cpp
,如果在CMake上,将值ENABLE_PRINT
设置为ON
。
项目目录如下所示:
使用上面的例子,我做了以下事情:
CMakeLists.txt
上,我添加了OPTION( ENABLE_PRINT "Enable Print" ON)
Config.h
文件中,我添加了#define ENABLE_PRINT
Config.h.in
上,我添加了#cmakedefine ENABLE_PRINT
example.cpp
上,我在cout << "print";
和#ifdef ENABLE_PRINT
#endif
醇>
进行这些更改后,项目将配置并生成就好了。但是,当我制作软件时,它会出错并且基本上告诉我,我用#ifdef
包围的代码块根本没有被执行;它被忽略了。换句话说,我采取的上述步骤没有做任何事情,除了“注释掉”我希望以ENABLE_PRINT为条件的代码块。
那么,我将如何使这项工作?
答案 0 :(得分:7)
您可以将option
和add_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