私は複数のプラットフォームで実行されているクロスプラットフォームプロジェクトを持っています。そこ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_os
がLinuxARM
場合でも、何とか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_ARM
がLinux
で何の問題もないように思われます。それはうまく動作します。
、ありがとうMATCHESは正規表現マッチを行うことを知りませんでした。 – kaushal
@kaushalドキュメントを読むと、SOの質問を書いて、asnwerを待たなければならないという面倒を省くことができました;-) – Angew
はい、そうです。これは私がCmakeを使用している初めてのことです。 :) – kaushal