2016-01-28 17 views
3

我一直在試圖圍繞MPI和OpenMP構建一個包裝,使其具有統一的代碼格式,而不必在MPI_xxx,omp_xxx和#pragma omp xxx之間進行切換。如何爲編譯指示創建包裝並使其正確編譯?

我一直在周圍產生不同的#pragma OMP指令的包裝問題,到目前爲止,我已經得到了最好是把它作爲:

#define _mmc_(x) _Pragma("omp ## #x") 

(MMC是暫定名我庫)

所以,如果我想有

#pragma omp parallel for 

相應的包裝應該是

_mmc_(parallel for) 

然而,當它編譯,編譯器似乎以不同的方式對其進行評估,給我編譯警告

test.cpp:22:0: warning: ignoring #pragma omp [-Wunknown-pragmas] 
    _mmc_(parallel for) 

我與MPIC++在Ubuntu 14.04編譯的MPICH 3.0.4周圍GCC 4.8.4,與標誌

-fopenmp -lm -std=c++11 -Wall 

有什麼我可以做或添加到代碼來完成這項工作,或者這僅僅是一些無法用現有的工具來完成?

+0

小記:以下劃線開頭的全局名稱保留用於實現。 – chris

回答

2

這應該工作,as seen here

#define PRAGMA(x) _Pragma(#x) 
#define _mmc_(x) PRAGMA(omp x) 

_Pragma是服用一個字符串有點嚴格,所以我們就可以對整個編譯參數字符串常量,而不是拼湊在一起,這裏面_Pragma。預處理器操作符不會在字符串內工作,就像您在帖子中嘗試的那樣。

+0

謝謝!這完全按照我想要的方式工作。還要感謝關於以下劃線開頭的名字的說明,我完全忘記了這一點。 –