Внутренняя конфигурация сборки во время разработки проекта - хорошие практики - PullRequest
0 голосов
/ 06 июня 2018

Прежде всего извините за смутное название.Если кто-то придумает лучшее, не стесняйтесь его менять.

Я занимаюсь разработкой библиотеки c ++ в Visual Studio, и во время разработки я хочу изменить некоторые внутренние конфигурации сборки (для упрощениятестирование, трассировка и т. д.), т. е. компилировать код для последовательного, а не параллельного выполнения (более простая отладка).

Сейчас я делаю это, определяя некоторые макросы в отдельном заголовочном файле:

BuildConfig.hpp

#pragma once

#ifdef _DEBUG 
    #define MM_DEBUG true
#else
    #define MM_DEBUG false
#endif

// temporarily overrules _DEBUG
#define MM_DEBUG true

#define MM_PARALLEL true
#define MM_DEBUG_SEQUENTIAL (MM_DEBUG && !MM_PARALLEL)

#if MM_PARALLEL
    #define MM_EXEC_POLICY std::execution::par
#else
    #define MM_EXEC_POLICY std::execution::seq
#endif

Единственная проблема, с которой я сталкиваюсь при использовании файла заголовка, заключается в том, что я должен включить его в каждый исходный файл (или заголовок), чтобы сделатьМакросы доступны.Но когда я забываю включить этот заголовок где-нибудь, эти исходные файлы не будут собраны правильно (так как все операторы #if оценятся как ложные, потому что макрос не существует в этом файле).

Есть ли способ экспорт всех макросов из BuildConfig.hpp в командную строку, чтобы макросы становились доступными для всего проекта (например, _DEBUG или __cplusplus)?

Это даже хорошая практика?Существуют ли более эффективные способы (с точки зрения хорошей практики) для достижения того, чего я хочу?

Редактировать

Я нашел способ включить заголовок BuildConfig.hpp вкаждый файл, используя флаг FI (принудительное включение).Он находится в свойства проекта> C / C ++> Дополнительно> Принудительный файл включения

1 Ответ

0 голосов
/ 06 июня 2018

Макрос _DEBUG доступен для всего проекта, поскольку он определен на странице свойств проекта в Visual Studio.Я не уверен, что есть возможность экспортировать макросы из * .hpp в cmd (насколько я знаю, это невозможно).Поскольку вы пометили свой вопрос в Visual Studio, я предполагаю, что это единственная IDE, которую вы используете, и вам нет дела до переносимости.

Когда дело доходит до Visual Studio, существуют листы свойств, которые предназначены дляпровести всю конфигурацию для проекта.Они разделены по типу сборки (например, отладка, выпуск, x64, x86).Я думаю, что было бы неплохо использовать их.Вы можете прочитать больше об этом на MSDN .ИМХО, я думаю, это лучше, чем хранить все это в каком-то исходном файле, но это только мое мнение.

Я не уверен, что это лучший способ.Как и во многих библиотеках C ++, часто используется много макросов, аналогично тому, что вы написали, например, проверка версии компилятора и переключение некоторых вещей, если определено _DEBUG.Другая вещь, которую можно выбрать, - это использование CMake, который содержит конфигурацию сборки, но это будет почти то же самое, что страница свойств Visual Studio (но будет более переносимой для других ОС).

Важная вещь никогда не делает такого рода хак, потому что когда-нибудьВы забудете удалить его, и это вызовет проблемы у других

// temporarily overrules _DEBUG
   #define MM_DEBUG true
...