cmake를 사용하여 C 헤더 파일을 자동으로 생성하는 방법은 무엇입니까?
문제
헤더 파일을 자동으로 생성하는 방법을 찾고 있습니다. 이 파일은 라이브러리의 공개 인터페이스이며 편집하기 전에 일부 구조와 물건을 "채우고"하고 싶습니다.
예를 들어, 개인 헤더에는 유용한 필드가있는 구조가 있습니다.
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}
이것은 꽤 잘 작동합니다 :)
제휴하지 않습니다 StackOverflow