当前位置:  开发笔记 > 编程语言 > 正文

如何使用CMake自动生成C头文件?

如何解决《如何使用CMake自动生成C头文件?》经验,为你挑选了1个好方法。

我正在寻找一种自动生成头文件的方法.这个文件是库的公共接口,我想在编译之前"填充"一些结构和东西.

例如,在私有标头中,我有一个包含有用字段的结构:

typedef struct mystuff_attr_t {
  int                      _detachstate;
  mystuff_scope_t          _scope;
  cpu_set_t                _cpuset;
  size_t                   _stacksize;
  void*                    _stackaddr;
} mystuff_attr_t;

我希望在没有字段但具有相同大小(目前手动完成)的公共标题中使用此结构:

typedef struct mystuff_attr_t {
  char _opaque[ 20 ]; 
} mystuff_attr_t;

我想在创建构建系统时由CMake自动生成这个,以便在我更改私有头中的struct时避免公共接口中的大小结构错误.



1> claf..:

实际上,CMake允许您生成文件(使用configure_file (file.h.in file.h))并检查类型大小(使用check_type_size ("type" header.h)),因此很容易将这两者组合起来以获得正确的公共标头.这是我在CMakeList.txt中使用的一段代码:

# Where to search for types :
set (CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/private_type.h)

# Type1 :
check_type_size ("type1_t" MY_SIZEOF_TYPE1_T)

# Generate public header :
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/pub_type.h.in ${CMAKE_CURRENT_BINARY_DIR}/pub_type.h)

# Need to set this back to nothing :
set (CMAKE_EXTRA_INCLUDE_FILES)

并在公共标题pub_type.h.in中:

#define MY_SIZEOF_TYPE1_T ${MY_SIZEOF_TYPE1_T}

这工作得很好:)


您应该指定需要添加以下行:include(CheckTypeSize).
推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有