2016-10-03 9 views
0

私は複数のプラットフォームで実行されているクロスプラットフォームプロジェクトを持っています。そこCmakeLists.txtは、プロジェクト内のすべてのディレクトリにあり、ほとんどのcmakeのファイルはのようなコードを持っている:CMAKE:一意の変数名は無視されました

入力:上記のサンプルで

# set target os 
if (DEFINED target_os) 
SET (HRAD_SDK_TARGET_OS "${target_os}") 
else() 
SET (HRAD_SDK_TARGET_OS "${CMAKE_SYSTEM_NAME}") 
endif() 
message(STATUS "=============== SDK: ccccccccccccccccccccccccccccccccccccccccccccccc==============") 
message(STATUS "target_os: ${target_os}") 
message(STATUS "HRAD_SDK_TARGET_OS: ${HRAD_SDK_TARGET_OS}") 

# set target bit 
if ("${HRAD_SDK_TARGET_OS}" MATCHES "Linux") 
message(STATUS "=============== SDK: ddddddddddddddddddddddddddddddddddddddddddddddd==============") 
message(STATUS "target_os: ${target_os}") 
message(STATUS "HRAD_SDK_TARGET_OS: ${HRAD_SDK_TARGET_OS}") 

if ("${target_arch_bit}" MATCHES "64") 
    SET (TARGET_ARCH_BIT -m64) 
else() 
    SET (TARGET_ARCH_BIT -m32) 
endif() 
endif() 
message(STATUS "TARGET_ARCH_BIT: ${TARGET_ARCH_BIT}") 
# set flags 
SET (ADDITION_C_FLAGS "-Wno-unused -Wno-parentheses") 
if ("${HRAD_SDK_TARGET_OS}" MATCHES "LinuxARM") 
message(STATUS "=============== SDK: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==============") 
message(STATUS "target_os: ${target_os}") 
message(STATUS "HRAD_SDK_TARGET_OS: ${HRAD_SDK_TARGET_OS}") 

は、target_osはなどLinux, LinuxARM, MacOSX, QNXなどの値を持つことができます

ただし、何らかの理由でLinuxARMという名前が好きではない場合は、Linuxと見なしているようです。 target_osLinuxARM場合でも、何とかLinuxチェックしてループが真であると私は以下のように出力を取得し、コンパイルが失敗した上記のコードで

-

出力:

-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- =============== SDK: ccccccccccccccccccccccccccccccccccccccccccccccc============== 
-- target_os: LinuxARM 
-- HRAD_SDK_TARGET_OS: LinuxARM 
-- =============== SDK: ddddddddddddddddddddddddddddddddddddddddddddddd============== 
-- target_os: LinuxARM 
-- HRAD_SDK_TARGET_OS: LinuxARM 
-- TARGET_ARCH_BIT: -m32 
-- =============== SDK: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx============== 
-- target_os: LinuxARM 
-- HRAD_SDK_TARGET_OS: LinuxARM 
-- =============== utils: CMakeLists.txt ============== 
-- target os: LinuxARM 
-- TARGET_OS: 
-- CMAKE_C_FLAGS: -fPIC -Wno-unused -Wno-parentheses -D_REENTRANT 
-- CMAKE_CPP_FLAGS: -fPIC -Wno-unused -Wno-parentheses -std=gnu++0x -D_REENTRANT 
-- CMAKE_CXX_FLAGS: -fPIC -Wno-unused -Wno-parentheses -std=gnu++0x -D_REENTRANT 
-- CMAKE_LD_FLAGS: -Wl -rpath-link,/usr/arm-linux-gnueabihf/lib 
-- CMAKE_C_COMPILER: /usr/bin/arm-linux-gnueabihf-gcc 
-- CMAKE_CPP_COMPILER: /usr/bin/arm-linux-gnueabihf-g++ 
-- CMAKE_CXX_COMPILER: /usr/bin/arm-linux-gnueabihf-g++ 

することができますように行を含むブロックに入ってはならないことを確認してください。 ddddddddddddddddddddddddd

名前を0に変更するとには、LINUX_ARMなどの他の名前や完全にランダムなNEWHLOSなどがあり、コードは正常にコンパイルされます。

LinuxのようなものはLinuxARMのサブセットですが、それはちょうどLinuxとして扱います。

誰かがLinuxARMが好きではない理由を助けることができますか? cmakeの変数名は大文字と小文字が区別されますが、私の場合は変数が完全に一意です。

また、すべてのcmakeキャッシュファイルを削除し、以前のビルドファイルをすべて削除しましたが、問題は解決しません。

アップデート1:

LINUX_ARMLinuxで何の問題もないように思われます。それはうまく動作します。

答えて

2

if()MATCHESサブコマンドは、正規表現マッチ、documentedとしてを行います。もちろん、テキストLinuxARMは正規表現Linuxと一致します。何が欲しいのSTREQUAL、ないMATCHES次のとおりです。

if ("${HRAD_SDK_TARGET_OS}" STREQUAL "Linux") 
+0

、ありがとうMATCHESは正規表現マッチを行うことを知りませんでした。 – kaushal

+0

@kaushalドキュメントを読むと、SOの質問を書いて、asnwerを待たなければならないという面倒を省くことができました;-) – Angew

+0

はい、そうです。これは私がCmakeを使用している初めてのことです。 :) – kaushal

関連する問題