2011-02-10 4 views
2

私は、現在作業中のライブラリを持っているか、またはCPUのアーキテクチャごとに最適化されたアセンブリを持っています。私たちは、nehalem、core2、k8などの最適化について話しています。cmakeでのコンパイル時のアーキテクチャの検出

とにかく、私は最近、ビルドシステムの実験をしてきたとCMakeので以下を設定するために管理している:

add_executable(arch/cpuid_x86 arch/cpuid_x86.c) 
execute_process(COMMAND ${PROJECT_BINARY_DIR}/arch/cpuid_x86 
    OUTPUT_VARIABLE PROJECT_CPUID OUTPUT_STRIP_TRAILING_WHITESPACE) 

これは、あなたはそれがない何を考えてい。 cpuid_x86.cは、少しのCプログラムで、cpuid命令を呼び出すためのインラインアセンブリがいくつかあります。それは前記命令の整数結果からアーキテクチャストリングを導き出し、それをstdoutに書き込む。

これで、上記の出力がヘッダーファイルで直接使用されるか、ファイル名を作成することになりました。これがアイデアです。

しかし、私はcmakeの新人です。ちょうどこれがちょっとしたハックだと感じています。おそらくそれではないので、私の質問は私がcmakeをここで正しい方法で使用しているのですか?私は予期せぬ問題にどこかでつまずいていますか?

答えて

1

try_runをコンパイルして実行する方がよいでしょう。クロスコンパイル時に問題が発生することに注意してください。一般的なx86コードに戻って(コードをビルドしている人に手動でキャッシュ変数を設定させて)喜んでいない限り、注意してください。これにより、サブアーキテクチャの名前をCMake変数に格納することができ、configure_fileのようなヘッダに置き換えることができます。

+0

ありがとう、それは私が必要とするもののように見えます。クロスコンパイルについては、一度に少しずつ段階的ですが、将来的には、ユーザーがビルドしたいアーチの名前を渡すことを望み、このコードを実行する必要はありません。しかし今のところ、私は "自分のシステム上に構築する"というソリューションが必要です。これは合っています。ありがとう! –

関連する問題