2017-08-27 85 views
0

我想指定將在GCC編譯我的C代碼的編譯器選項。由於代碼的部署方式,我需要從代碼中完成此操作。這是目前看起來成功指定優化標誌的代碼。如何指定-march =本地使用編譯指示(或其他方式)在GCC

#pragma GCC optimize ("-O3,-ffast-math") 
typedef float v4sf __attribute__ ((vector_size (16))); 
typedef union { 
    v4sf v; 
    float e[4]; 
} float4; 
typedef struct { 
    float4 x; 
    float4 y; 
} complex4; 
static complex4 complex4_mul(complex4 a, complex4 b) { 
    return (complex4){a.x.v*b.x.v -a.y.v*b.y.v, a.y.v*b.x.v + a.x.v*b.y.v}; 
} 
complex4 f4(complex4 x[], int n) { 
    v4sf one = {1,1,1,1}; 
    complex4 p = {one,one}; 
    for (int i = 0; i < n; i++) p = complex4_mul(p, x[i]); 
    return p; 
} 

不過,我也想指定-march=native。這可能是 從代碼內部?

我也嘗試#pragma GCC optimize ("-O3,-ffast-math, -march=native") -march=native部分只是似乎被忽略。見https://godbolt.org/g/FjbRcV

+0

它不是忽視,是錯誤的。你想要存檔什麼? '-march'實際上是在你交叉編譯時使用的。本機是指機編譯器拱上 –

+0

運行@ PeterJ_01我想GCC產生相同的代碼,我會得到我已經做了'gcc的-O3 -ffast-數學-march = native'。 – eleanora

回答

2

現在我明白了。我就我所知,沒有其他方式比使用#pragma GCC target

例如:

#pragma GCC target ("arch=skylake-avx512")

但它不接受native作爲參數。我把它添加到您的godbolt

https://godbolt.org/g/vm1ZBa

IMO這是因爲他們應該通過使用命令行參數的編譯錯誤的方法和正確寫入生成文件

相關問題