cmake를 사용하여 C 헤더 파일을 자동으로 생성하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/637963

  •  10-07-2019
  •  | 
  •  

문제

헤더 파일을 자동으로 생성하는 방법을 찾고 있습니다. 이 파일은 라이브러리의 공개 인터페이스이며 편집하기 전에 일부 구조와 물건을 "채우고"하고 싶습니다.

예를 들어, 개인 헤더에는 유용한 필드가있는 구조가 있습니다.

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}

이것은 꽤 잘 작동합니다 :)

다른 팁

그만큼 전수기 도구 (수동).

헤더를 만드는 exe를 쓸 것입니다.

예를 들어:

#include <stdio.h>

#define PUBLIC(TYPE) \
printf( "typedef struct %s { char _opaque[ %d ]; } %s;\n", #TYPE, sizeof(TYPE), #TYPE )

int main()
  {
  // start header stuff

  PUBLIC(mystuff_attr_t);

  // end header stuff
  }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top