我有一些需要傳入的gcc標誌的遺留代碼。我可以爲這些標誌添加預處理器檢查嗎?如果需要的標誌不存在,則編譯失敗
例如,假設我需要-fno-strict-aliasing
,我可以做這樣的事情:
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
我有一些需要傳入的gcc標誌的遺留代碼。我可以爲這些標誌添加預處理器檢查嗎?如果需要的標誌不存在,則編譯失敗
例如,假設我需要-fno-strict-aliasing
,我可以做這樣的事情:
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
肯定是有沒有爲它的#define,至少在我的版本的GCC。
要查看所有預定義的處理器符號:
g++ -dM -E - < /dev/null
我不認爲有什麼辦法來測試這些選項。但是,如果您使用的是GCC 4.4或更高版本,則可以使用"optimize" function attribute或"optimize" #pragma在每個功能或每個文件的基礎上啓用特定的選項。
舉例來說,如果你將它添加到一個共同的頭文件:
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif
...它應該能爲每個包含頭文件的選項。
[更新]
行,所以我花了大約10分鐘太長,組成這個答案。無論如何,我將把它留在這裏,以便鏈接到GCC文檔。
哦,不:使用沒有嚴格別名的編譯指示不起作用:https://bugzilla.redhat.com/show_bug.cgi ?ID = 486176 – paleozogt
聽起來像是應該做的事情。 – 2011-09-22 17:07:43
@Code Monkey:當然可以通過make傳遞標誌。但是,如果源代碼轉移到可能會丟失知識的新制作系統(例如,如果您將源代碼分發到lib)。我希望代碼本身知道它需要什麼。這樣更幹。 :) – paleozogt