91

C または C++ コードをコンパイルするときに CPU アーキテクチャを見つける最も信頼できる方法は何ですか? 私が知る限り、さまざまなコンパイラには独自の非標準プリプロセッサ定義のセットがあります(_M_X86MSVS、__i386__GCC__arm__など)。

私が構築しているアーキテクチャを検出する標準的な方法はありますか? そうでない場合、すべての定型文を含むヘッダーなど、さまざまなコンパイラのそのような定義の包括的なリストのソースはあり#ifdefますか?

4

7 に答える 7

18

コンパイラ間の標準はありませんが、各コンパイラはかなり一貫している傾向があります。次のような自分用のヘッダーを作成できます。

#if MSVC
#ifdef _M_X86
#define ARCH_X86
#endif
#endif

#if GCC
#ifdef __i386__
#define ARCH_X86
#endif
#endif

何千ものコンパイラがありますが、広く使用されているのは 3 ~ 4 つだけです (Microsoft C++、GCC、Intel CC、おそらく TenDRA?)。アプリケーションがサポートするコンパイラを決定し、それらの #defines をリストし、必要に応じてヘッダーを更新するだけです。

于 2008-09-30T07:03:40.770 に答える
8

特定のプラットフォームで利用可能なすべての機能をダンプしたい場合は、次のように GCC を実行できます。

gcc -march=native -dM -E - </dev/null

、など#define __SSE3__ 1のマクロをダンプします。#define __AES__ 1

于 2016-05-04T04:07:32.447 に答える
3

標準的なものは何もありません。Brian Hook は、これらの多くを彼の「Portable Open Source Harness」で文書化し、それらを首尾一貫して使用可能なものにしようとさえしています (それに関しては ymmv)。このサイトの posh.h ヘッダーを参照してください。

上記のリンクでは、少し前に DOS 攻撃が行われたため、偽のユーザー ID/パスワードを入力する必要がある場合があります。

于 2008-09-30T07:03:39.693 に答える
-2

CPU 機能の詳細な検出が必要な場合、最善の方法は、CPU がサポートする一連の機能を標準出力または「cpu_config.h」ファイルに出力する CPUID プログラムも出荷することです。次に、そのプログラムをビルド プロセスに統合します。

于 2008-09-30T14:41:30.170 に答える