Как использовать макрос в директиве #include?

Я смущен тем, как использовать макросы в #includeдирективе. Я сделал это:

#include "../../../../GlobalDefintions.h"
#include "../../../../lib/libc++/" ARCH_FAMILY_S  "/" ARCH_S  "/stkl/printkc/printkc.h"

GlobalDefintions.h :

#ifndef _GlobalDefintions_
#define _GlobalDefintions_

/*Architecture Information Start*/


#define ARCH i386
#define ARCH_FAMILY x86


#define ARCH_S "i386"
#define ARCH_FAMILY_S "x86"

/*Architecture Information End*/

#endif /*_GlobalDefintions_*/

Но то, что это дает мне, таково:

kernel.c ++: 24:88: фатальная ошибка: ../../../../lib/libc++/: нет такого файла или каталога  

ARCH_FAMILY_S "../../../../lib/libc++/" ARCH_S "/" #include "/stkl/printkc/printkc.h"

Есть ли способ успешно добавить ARCH_FAMILY_Sи ARCH_Sв мою #includeдирективную строку?

c++,macros,include,

6

Ответов: 1


3 принят

Вы можете использовать ряд макросов для создания вашего файла include. К сожалению, я не могу придумать какой-либо более чистый (in-source) способ сделать это. Это работает для arm-eabi-none-gccv5.4.1.

#define LIBC_DIR ../../../../lib/libc++/

#define STRINGIFY_MACRO(x) STR(x)
#define STR(x) #x
#define EXPAND(x) x
#define CONCAT(n1, n2) STRINGIFY_MACRO(EXPAND(n1)EXPAND(n2))
#define CONCAT5(n1, n2, n3, n4, n5) STRINGIFY_MACRO(EXPAND(n1)EXPAND(n2)EXPAND(n3)EXPAND(n4)EXPAND(n5))

// Concatenate the five elements of your path.
// Of course, this can be simplified if there is only a prefix and a suffix
// that needs to be added and the ARCH_FAMILY, /, and ARCH are always present
// in the macro-generated #include directives.
#include CONCAT5(LIBC_DIR,ARCH_FAMILY,/,ARCH,/stkl/printkc/printkc.h)
C ++, макросы, включают в себя,