私たちはCmakeFileList.txt file
に何か横があります。 ARMプラットフォーム上にIA32コンポーネントを構築しようとしています。私はこの問題を解決しようとしています。ARM、MIPS、IA32などのプラットフォームを特定する方法は?
問題のファイルがrdrand.cpp
命名されGLOB、から濾過アウトだった:
list(REMOVE_ITEM cryptopp_SOURCES
...
${CMAKE_CURRENT_SOURCE_DIR}/rdrand.cpp
...
${cryptopp_SOURCES_TEST}
)
set(cryptopp_SOURCES
今私は戻ってIA32プラットフォーム用でrdrand,cpp
を追加しようとしています。私はARCHITECTURE_ID
と"X86"
、"X32"
、"X64"
または"x64"
(xは大文字の代わりに小文字ではありません)を使用して述語が必要なように見えます。ここで
は、述語を作成するための私の試みです:以下
# http://github.com/weidai11/cryptopp/issues/419
if (${ARCHITECTURE_ID} == "X86" OR ${ARCHITECTURE_ID} == "X32" OR ${ARCHITECTURE_ID} == "X64")
list(APPEND cryptopp_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/rdrand.cpp)
endif()
結果はCMakeの3.5.2とのBeagleBoardからです。どちら==
、=
、STREQUAL
が動作しているようです:
CMake Error at CMakeLists.txt:310 (if):
if given arguments:
"==" "X86" "OR" "==" "X32" "OR" "==" "X64"
Unknown arguments specified
そして:ARCHITECTURE_ID
はほとんど役に立たない使用方法を検索するための
$ cmake .
CMake Error at CMakeLists.txt:310 (if):
if given arguments:
"STREQUAL" "X86" "OR" "STREQUAL" "X32" "OR" "STREQUAL" "X64"
Unknown arguments specified
私の試み。 I can't find an exampleまたはthe docs on Cmake's site。 "${ARCHITECTURE_ID}"
の前後に引用符を付けることは役に立たなかった。変数ARCHITECTURE_ID
を示すように中括弧も削除しませんでした。
また、CMAKE_SYSTEM_PROCESSOR
と他の関連する定義を使用しようとしましたが、Cmakeは大部分が"unknown"を返します。それはあまり意味がありません。
を使用してIA32プラットフォームを特定するにはどうすればよいですか?または、このインスタンスで使用する必要がある別のものがありますか?
ありがとうございます。
ここでは、GNUmakefile
で行っていることがあります。ビルドシステムがないことを確認しますので、我々は重い物を持ち上げるをしなければならない:私はCMakeの中に存在しないARCHITECTURE_ID
という名前の変数を照会するとは思わない
IS_X86 := $(shell uname -m | $(EGREP) -v "x86_64" | $(EGREP) -i -c "i.86|x86|i86")
IS_X64 := $(shell uname -m | $(EGREP) -i -c "(_64|d64)")
...
# Need RDRAND for X86/X64/X32
ifeq ($(IS_X86)$(IS_X32)$(IS_X64),000)
SRCS := $(filter-out rdrand.cpp, $(SRCS))
endif
を明確にするために、私はIA32をしたいですこのルールはBSD、Linux、Unix、Solaris、OS X、Windowsの{x86 | x32 | x64}に適用されるためです。そして、CentOS 5とUbuntu 10で動作するものが必要です。 – jww
変数の値を文字列と比較する適切な方法は 'if(ARCHITECTURE_ID STREQUAL" X86 ")'です。 – Tsyvarev
ありがとう@Tsyvarev。 x86やx64マシンで 'ARCHITECTURE_ID STREQUAL" X86 "'が一致しないようです。 'ARCHITECTURE_ID STREQUAL" X64 "または" ARCHITECTURE_ID STREQUAL "x64" 'もどちらもしません。他のアイデア? – jww