[英]CMake - integrating options into C++ source files
我正在处理一个现有项目并为其清理 CMake。 但是,现在我对 go 如何将 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 为条件的代码块之外,我采取的上述步骤没有做任何事情。
那么,我将如何进行这项工作?
您可以像这里一样组合cmake的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 .
或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.