2016-09-14 13 views
4

私たちは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}、同じ元の問題で結果を(改行がまだ存在している)を追加。

+0

'文字列(STRIP UNAME_MACHINE、UNAME_MACHINE)' - それはあなたがカンマが含まれているため、それが失敗したことが考えられます( '')パラメータはcmakeの中にスペースで区切られたとき。 –

+0

CMakeのドキュメント[状態](https://cmake.org/cmake/help/v3.5/command/string.html#strip) 'string(STRIP <出力変数>)'コマンドは実際には 'string (STRIP $ {UNAME_MACHINE} UNAME_MACHINE) ' – AhmedBM

答えて

8

これは、変数に改行を終了ストリップ:

string(REGEX REPLACE "\n$" "" <varname> "${<varname>}") 

作品を、私はCMakeの2.8以降に関わったプロジェクトの一つのために。

+0

パーフェクト、ありがとうございました。 – jww

4

標準出力または標準エラー(あるいはその両方)のいずれかに末尾の空白を除去するためのフラグを持っています(および末尾の改行)。

string(STRIP <string> <output variable> 
関連する問題