加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何使用(配置文件)包含编译时依赖#defines的外部头文件?

发布时间:2020-12-16 07:16:58 所属栏目:百科 来源:网络整理
导读:想象一下,我正在编译(静态)库libfoo.a,它提供了一个头文件foo.h.我将我的应用程序APP与libfoo.a和#include foo.h链接起来.在我的源代码中. libfoo使用CMake作为具有用户定义变量的构建系统,例如BUILD_WITH_OPTION_BAR,它们作为定义传递给编译器: ADD_DEFINI
想象一下,我正在编译(静态)库libfoo.a,它提供了一个头文件foo.h.我将我的应用程序APP与libfoo.a和#include< foo.h>链接起来.在我的源代码中. libfoo使用CMake作为具有用户定义变量的构建系统,例如BUILD_WITH_OPTION_BAR,它们作为定义传递给编译器:

ADD_DEFINITIONS(BUILD_WITH_OPTION_BAR)

在foo.h中,我们将使用此选项找到#ifdef声明:

#ifdef BUILD_WITH_OPTION_BAR
   typedef long long int fooInt;
#else
   typedef int fooInt;
#endif

我的问题是:我怎么知道在我的APP中知道libfoo.a是否使用BUILD_WITH_OPTION_BAR构建?

换句话说:我在哪里以及何时在APP中定义BUILD_WITH_OPTION_BAR?

我的基本理解是库libfoo应该提供某种包含在foo.h中的config.h文件,但是如何在编译时(libfoo)获得可选的#define BUILD_WITH_OPTION_BAR?

我发现了这个相关的问题:add_definitions vs. configure_file,但它没有讨论这是如何实现的.

解决方法

这样做的方法是使用定义创建“config.h”文件,而不是将它们作为命令行参数传递给编译器.您可以使用库文件分发config.h文件.

Cmake提供了一种生成这种文件的机制.

CONFIGURE_FILE(<src filename>,<dest filename>)

通常,源文件名为“config.h.in”,输出文件名为“config.h”.在.in文件中这样的行:

#cmakedefine BUILD_WITH_OPTION_BAR 1

被替换为

#define BUILD_WITH_OPTION_BAR 1

如果启用该选项,否则它们会被注释掉.

有关更多信息,请参见https://cmake.org/cmake/help/v3.0/command/configure_file.html和http://www.vtk.org/Wiki/CMake:How_To_Write_Platform_Checks.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读