[英]qmake: detect target bit-width (32-bit or 64-bit)
我的程序中的設置取決於編譯目標的位寬。 在寬度為32位的情況下,由於存儲器限制,必須定義一些特殊的宏。
我在qmake中找不到任何方法來檢測目標的位寬,而cmake中的相同選項可用: CMAKE_SIZEOF_VOID_P
; 其中8是64位,4是32位。
qmake有類似的東西嗎?
編輯:評論中要求的問題背景
第1部分 :我在C ++ 11程序中使用的C庫需要宏在32位系統上采取不同的行為。
第2部分:在32位系統中,內存限制為4 GB的虛擬內存 。 即使您運行的是64位系統和計算機,即使您有500 GB的交換內存,32位程序也不能使用超過4 GB的內存。 這就是為什么我正在使用的庫具有32位的特殊設置,以限制它使用的內存量。 因此,我需要知道我們是否正在編譯32位目標(例如,Raspberry Pi),以激活所需的宏。
第3部分:在構建我的軟件之前,庫是作為qmake中的自定義目標構建的。 構建庫后,我的軟件就構建完成並鏈接到該庫。
我最終使用了這個解決方案。 首先我添加了這個來支持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")
}
你可以添加.pro文件之類的東西
*-64
{
message( "Building for 64 bit machine...")
}
所以當執行qmake時,你應該看到msg
為64位機器構建...
您應該能夠將宏與編譯時常量(但不是預處理器常量)結合使用來進行設置:
#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
測試宏 - 如果您認為存在,則需要在您的問題中顯示主題代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.