程序中的设置取决于我编译的 target 的位宽。如果宽度为32位,则由于内存限制,必须定义一些特殊的宏。
我could not find any way in qmake检测目标的位宽,而在cmake中可以使用以下相同的选项:CMAKE_SIZEOF_VOID_P
;其中8是64位,而4是32位。
qmake是否有类似的东西?
编辑:评论中要求的问题背景
第1部分:我的C ++ 11程序中使用了一个C库,该库需要一个宏才能在32位系统上以不同的方式起作用。
第2部分::在32位系统中,内存限制为virtual memory的4 GB。即使您正在运行64位系统和计算机,并且即使您具有500 GB的交换内存,一个32位程序也不能使用超过4 GB的内存。这就是为什么我正在使用的库对32位进行特殊设置以限制其使用的内存量。因此,我需要知道我们是否正在编译32位目标(例如Raspberry Pi)以激活所需的宏。
第3部分::库as a custom target in qmake是在构建软件之前构建的。构建库之后,便会构建我的软件并将其链接到该库。
答案 0 :(得分:1)
我最终使用了该解决方案。首先,我添加了此代码以支持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")
}
从here那里学到了这一点。
答案 1 :(得分:0)
您可以在.pro文件中添加类似的内容
*-64
{
message( "Building for 64 bit machine...")
}
所以当执行qmake时,您应该看到味精
正在为64位计算机构建...
答案 2 :(得分:0)
您应该能够将宏与编译时常量(而不是预处理器常量)结合使用来进行设置:
#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
测试宏-如果您认为有宏,则需要在问题中显示主题代码。