私たちはCMakeによって作られたmakefileを改良しようとしています。 Clang、GCC、ICCの場合は、-march=native
を追加します。CMake変数の末尾の空白を取り除く方法は?
STATUS,1
STATUS,Compiler: xGNUx
STATUS,2
STATUS,Machine: xx86_64
x
UNAME_MACHINE
を生成するブロックである:
# We need the output 'uname -m' for Unix and Linux platform detection
# Be prepared for i386-i686, amd64, x86_64, arm, arm64, armel, armhf,
# mips, mips64, aarch32 and aarch64 (for starters)
set (UNAME_CMD "uname")
set (UNAME_ARG "-m")
execute_process(COMMAND ${UNAME_CMD} ${UNAME_ARG}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE UNAME_RESULT
OUTPUT_VARIABLE UNAME_MACHINE)
メッセージ文がuname
からマシンの文字列の末尾に改行を持って示して
# -march=native for GCC, Clang and ICC on i386, i486, i586, i686 and x86_64.
message(STATUS, "1")
message(STATUS, "Compiler: x${CMAKE_CXX_COMPILER_ID}x")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
message(STATUS, "2")
message(STATUS, "Machine: x${UNAME_MACHINE}x")
if (("${UNAME_MACHINE}" MATCHES "i.86") OR ("${UNAME_MACHINE}" STREQUAL "x86_64"))
message(STATUS, "3")
if (CMAKE_VERSION VERSION_LESS 2.8.12)
add_definitions(-march=native)
else()
add_compile_options(-march=native)
endif()
endif()
endif()
:そうするためのブロックは次のようになりますCMakeの後ろの改行をUNAME_MACHINE
から取り除くにはどうしたらいいですか?
改行の影響を受けない正規表現matches
に切り替える必要がありますか?
他に何かすればいいですか?
私たちはCurrentを通じてCMake 2.8をサポートしようとしています。それはおおよそ私たちをUbuntu 12.04 LTSに戻します。その時代には、もう少し前進するオペレーティングシステムがいくつかあります。 string(STRIP <string> <output variable>)
は有望に見えますが、CMake does not supply version information with its documentationです。要件を満たしているかどうかはわかりません。
EDIT私たちが何かを必要と表示されますので、3.0.2では動作しませんストリッピング表示されます。 (私たちはxx86_64x
を期待する)は、次の中
# Strip lead and trailing whitepasce
string(STRIP UNAME_MACHINE, UNAME_MACHINE)
結果:
STATUS,1
STATUS,Compiler: xGNUx
STATUS,2
STATUS,Machine: xUNAME_MACHINE,x
ドル記号と中括弧、${UNAME_MACHINE}
、同じ元の問題で結果を(改行がまだ存在している)を追加。
'文字列(STRIP UNAME_MACHINE、UNAME_MACHINE)' - それはあなたがカンマが含まれているため、それが失敗したことが考えられます( '')パラメータはcmakeの中にスペースで区切られたとき。 –
CMakeのドキュメント[状態](https://cmake.org/cmake/help/v3.5/command/string.html#strip) 'string(STRIP<出力変数>)'コマンドは実際には 'string (STRIP $ {UNAME_MACHINE} UNAME_MACHINE) ' –
AhmedBM