vcpkg: Укажите выравнивание члена структуры

У меня есть старый код, который скомпилирован с упаковкой в ​​1 байт (аргумент /Zp1) Struct Member Alignment, и я добавляю к ним модульное тестирование с помощью gTest. я используюvcpkgдля установки gTest, но он скомпилирован с использованием по умолчанию 8-байтовой упаковки. Я нахожусь в Windows с VS2019.

Можно ли указать, какую упаковку использовать (параметр /Zp) с vcpkg?

1 ответ

Поскольку невозможно изменить выравнивание элементов структуры библиотек во время компиляции: мне пришлось изменить свой код, чтобы использовать разные выравнивания упаковки при включении заголовков этих библиотек.

Везде, где я использую заголовки gTest или других библиотек, предоставленных , я заключаю их в #pragma pack(push, n)а также #pragma pack(pop). Значение nзависит от настроек по умолчанию, которые в моем случае 8.

      // project specific headers
#include "version.hxx"

// 3rd party libraries (provided by vcpkg)
#pragma pack(push, 8)
#include <gtest/gtest.h>
#include <gtest/gmock.h>
#pragma pack(pop)

// STL
#include <vector>

using std::vector;

Это не лучшее решение, но, по крайней мере, обходной путь для использования vcpkgс кодом, который использует другое выравнивание упаковки.

Другие вопросы по тегам