我正在处理一个现有项目,并为此清理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为条件的那一部分代码之外没有做任何事情。
那么,我将如何进行这项工作?
您可以像这里一样结合option
和add_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] 删除。
我来说两句