qmake: определить целевую битовую ширину (32-битную или 64-битную) - PullRequest
0 голосов
/ 24 октября 2018

У меня есть настройки в моей программе, которые зависят от битовой ширины target моей компиляции.В случае, если ширина 32-битная, из-за ограничений памяти должен быть определен некоторый специальный макрос.

I не смог найти какой-либо способ в qmake , чтобы определить битовую ширину цели, в то время как та же опция доступна в cmake с: CMAKE_SIZEOF_VOID_P;где 8 - 64-битная, а 4 - 32-битная.

Есть ли что-то похожее для qmake?


РЕДАКТИРОВАТЬ: Справочная информация о проблеме, запрошенная вкомментарии

Часть 1 : В моей программе на C ++ 11 я использую библиотеку C, которой нужен макрос для работы по-другому в 32-битных системах.

Часть 2: В 32-разрядных системах объем памяти ограничен 4 ГБ виртуальной памяти .Даже если вы используете 64-разрядную систему и компьютер, и даже если у вас есть 500 ГБ подкачки памяти, 32-разрядная программа не может использовать более 4 ГБ.Вот почему библиотека, которую я использую, имеет специальные настройки для 32-битной системы, чтобы ограничить объем используемой памяти.Следовательно, мне нужно знать, компилируем ли мы для 32-битной цели (например, Raspberry Pi), чтобы активировать необходимый макрос.

Часть 3: Библиотека построена как пользовательская цель в qmake перед сборкой моего программного обеспечения.Как только библиотека собрана, моё программное обеспечение собрано и связано с этой библиотекой.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Вы должны иметь возможность использовать макрос в сочетании с константами времени компиляции (но не константами препроцессора) для настройки:

#define TARGET_64 (sizeof(void*) == 8)
#define TARGET_32 (sizeof(void*) == 4)

Затем, например, для изменения объема выделенной памяти:

char buffer1[TARGET_32 ? 0x10000000 : 0x40000000];
char *buffer2;

void foo(void) {
  buffer2 = malloc(TARGET_32 ? 0x10000000 : 0x40000000);
}

Вероятно, нет необходимости проверять макрос с помощью #ifdef - если вы думаете, что он есть, вам нужно показать код темы в вашем вопросе.

0 голосов
/ 24 октября 2018

В итоге я воспользовался этим решением.Сначала я добавил это для поддержки linux:

linux-g++:QMAKE_TARGET.arch = $$QMAKE_HOST.arch
linux-g++-32:QMAKE_TARGET.arch = x86
linux-g++-64:QMAKE_TARGET.arch = x86_64

, а затем это:

contains(QMAKE_TARGET.arch, x86_64) {
    message("Compiling for a 64-bit system")
} else {
    DEFINES += ABC
    message("Compiling for a 32-bit system")
}

Узнал это от здесь .

0 голосов
/ 24 октября 2018

вы можете добавить в файл .pro что-то вроде

*-64
{
    message( "Building for 64 bit machine...")
}

, поэтому при выполнении qmake вы должны увидеть msg

Building для 64-битной машины ...

...