2015-04-01 1 views
0

J'essaye de porter OpenBSD sur Linux mais je suis confus par l'utilisation de la macro __only_inline. Cette macro vient de /usr/include/sys/cdefs.h qu'il définit comme suit:Déterminer la macro C de __only_inline utilisée sur BSD

/* 
* __only_inline makes the compiler only use this function definition 
* for inlining; references that can't be inlined will be left as 
* external references instead of generating a local copy. The 
* matching library should include a simple extern definition for 
* the function to handle those references. c.f. ctype.h 
*/ 
#ifdef __GNUC__ 
# if __GNUC_PREREQ__(4, 2) 
#define __only_inline extern __inline __attribute__((__gnu_inline__)) 
# else 
#define __only_inline extern __inline 
# endif 
#else 
#define __only_inline static __inline 
#endif 

Quelqu'un peut-il expliquer le but de cette macro? Il est utilisé dans OpenBSD faire en targ.h:

http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/make/targ.h?rev=1.13&content-type=text/x-cvsweb-markup

Répondre

0

est-ce pas le commentaire assez clair? La définition __only_inline ne doit être utilisée que si elle peut être en ligne. Une autre définition doit exister ailleurs pour des utilisations où elle ne peut pas être inline.

Vous voudrez peut-être jeter un oeil à bmake à partir de NetBSD/pkgsrc. C'est un Make très similaire qui a été autoconfigé et est déjà portable sur GNU/Linux. Vous pouvez trouver la dernière version ici: Bmake

En général, vous pouvez probablement simplement l'ignorer entièrement (c'est-à-dire l'enlever), ou le convertir en seulement extern inline.

Si vous envoyez un courriel à Marc, il peut probablement vous dire exactement pourquoi il l'a utilisé dans ce cas.