如何使用CMake自动生成C头文件?
发布时间:2020-12-16 10:38:20 所属栏目:百科 来源:网络整理
导读:我正在寻找一种自动生成头文件的方法.这个文件是库的公共接口,我想在编译之前“填充”一些结构和东西. 例如,在私有标头中,我有一个包含有用字段的结构: typedef struct mystuff_attr_t { int _detachstate; mystuff_scope_t _scope; cpu_set_t _cpuset; siz
我正在寻找一种自动生成头文件的方法.这个文件是库的公共接口,我想在编译之前“填充”一些结构和东西.
例如,在私有标头中,我有一个包含有用字段的结构: 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自动生成这个,以便在我更改私有头中的结构时避免公共接口中的大小结构错误. 解决方法
事实上,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} 这工作得很好:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |