【发布时间】:2019-03-28 17:26:21
【问题描述】:
我的程序中有一些设置取决于我编译的目标的位宽。如果宽度是 32 位,由于内存限制,必须定义一些特殊的宏。
我 could not find any way in qmake 来检测目标的位宽,而在 cmake 中可以使用相同的选项:CMAKE_SIZEOF_VOID_P;其中 8 是 64 位,4 是 32 位。
qmake 有类似的东西吗?
编辑: cmets 中要求的问题背景
第 1 部分:我在 C++11 程序中使用了一个 C 库,它需要一个宏才能在 32 位系统上以不同的方式运行。
第 2 部分:在 32 位系统中,内存限制为 4 GB virtual memory。即使您运行的是 64 位系统和机器,即使您有 500 GB 的交换内存,32 位程序也不能使用超过 4 GB 的内存。这就是为什么我使用的库具有 32 位的特殊设置,以限制它使用的内存量。因此,我需要知道我们是否正在为 32 位目标(例如 Raspberry Pi)进行编译,以激活所需的宏。
第 3 部分: 该库是在构建我的软件之前构建的as a custom target in qmake。构建库后,我的软件将构建并链接到该库。
【问题讨论】:
-
相关并不意味着因果关系...仅仅因为
void*恰好是4或8并不意味着您使用的是 32 位或 64 位系统。它通常是这样的,但它没有在任何地方指定或标准化。 -
@Someprogrammerdude 我不是在寻找它是 32 位还是 64 位 系统。我正在寻找 目标 是 32 位还是 64 位。这是一个与虚拟内存有关的问题,在 32 位目标中限制为 4 GB。
-
主机或目标无所谓,你仍然不能使用指针的宽度而不是hint来猜测。
-
也许
contains(QMAKE_TARGET.arch, x86_64)qmake 语句会给你正确的答案? -
@Someprogrammerdude 我编辑了这个问题。我希望这能回答你的问题。我基本上需要知道可寻址内存的数量,如果我的理解是正确的,那么 32 位系统限制为 4 GB 虚拟内存。
标签: c++ qt architecture qt5 qmake