Кроме статических относительных путей, вы также можете поиграть с препроцессором chicanery. Одна из техник, которые я видел в Adobe для кроссплатформенного кода, заключалась в следующем:
/* globalplatform.h */
#ifdef MAC
#define PLATFORM "../Platform/Mac/MacPlatform.h"
/* custom standard IO etc */
#define STDIO "../Platform/Mac/io/stdio.h"
#define CTYPE "../Platform/Mac/io/ctype.h"
#endif
#ifdef WIN32
#define PLATFORM "../Platform/Win/WinPlatform.h"
#define STDIO <stdio.h>
#define CTYPE <ctype.h>
#endif
/* etc */
#ifndef PLATFORM
#error undefined PLATFORM
#endif
/* some C file */
#include "globalplatform.h"
#include PLATFORM
#include STDIO
/* don't need CTYPE, no penalty */
Хотя проблема с платформой не является вашей проблемой, вы можете определить относительные пути на основе конфигурации сборки, если хотите, и изменения конфигурации происходят в одном месте, а не во многих, и клиентские файлы извлекают только то, что им нужно. Недостатком является то, что все инструменты, которые вы используете для просмотра файлов заголовков (щелчок правой кнопкой мыши и т. Д.), Скрыты.