Использование CMake для удаления частей файла .h.in вместо добавления путем замены.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использование CMake для удаления частей файла .h.in вместо добавления путем замены.

Сообщение Anonymous »

У меня есть библиотека, в которой я хотел бы опубликовать один из двух почти идентичных заголовков общедоступного API, в зависимости от флага сборки, однако этот флаг сборки должен быть совершенно неизвестен пользователю библиотеки. У меня есть флаг CMake, который используется для определения флага сборки, который, конечно, я мог бы просто использовать для включения одного из этих двух заголовков. Однако заголовки идентичны, за исключением точного определения одной функции, и поддерживать их как два отдельных заголовка — плохая идея. Замена CMake блоком кода вместо чего-то вроде @API_VERSION_1@ и @API_VERSION_2@ также кажется ненужной когнитивной перегрузкой, требующей последующего открытия другого файла, содержащего их определения. Мне бы хотелось один большой заголовок, примерно такой:

Код: Выделить всё

// api.h.in

#pragma once

#ifdef BUILD_VERSION_1
void api(int x);
#endif

#ifdef BUILD_VERSION_2
void api(float x);
#endif

void otherFunction();
который затем генерируется CMake в:

Код: Выделить всё

// api.h - where CMake has set BUILD_VERSION_1 ON and BUILD_VERSION_2 OFF

#pragma once

void api(int x);

void otherFunction();
или

Код: Выделить всё

// api.h - where CMake has set BUILD_VERSION_1 ON and BUILD_VERSION_2 ON

#pragma once

void api(int x);

void api(float x);

void otherFunction();
Таким образом, специалист по сопровождению кода может просматривать весь API в одном месте без необходимости переключаться между различными файлами, тогда как пользователь видит только те части API, которые ему доступны, не зная о флаге сборки.
Возможно ли это каким-то четко определенным способом, имеющим прецедент? Я изо всех сил пытаюсь найти ответы, хотя есть все шансы, что мои поисковые запросы неудовлетворительны!

Подробнее здесь: https://stackoverflow.com/questions/798 ... -substitut
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»