CMake文檔建議在交叉編譯時設置CMAKE_CROSSCOMPILING。在我的CMakeLists.txt我有臺詞:如何檢測到我在CMakeLists.txt中進行交叉編譯?
IF(CMAKE_CROSSCOMPILING)
message(STATUS "Cross-compiling so skipping unit tests.")
option(GAME_PORTAL_UNIT_TEST "Enable unit testing of Game Portal code" OFF)
ELSE()
message(STATUS "Enabling unit testing of Game Portal code")
option(GAME_PORTAL_UNIT_TEST "Enable unit testing of Game Portal code" ON)
ENDIF()
從運行輸出:
cmake -DCMAKE_TOOLCHAIN_FILE=../crosscompile/raspberry_pi/CMakeCross.txt .
包括「啓用的遊戲門戶代碼進行單元測試」的文字,如此清楚這個變量沒有被設置無論如何,它無論如何評估爲真。
我試圖修改CMakeCross.txt包括:
set(CMAKE_CROSSCOMPILING ON CACHE BOOL "Cross-compiling" FORCE)
和清洗老CMakeCache.txt並重新運行我的cmake的命令,我可以看到,新CMakeCache.txt現在包括這個變量之後,但我仍然得到與之前單元測試啓用相同的結果。
如何可靠地檢測到我正在交叉編譯,因此我可以正確禁用單元測試?
按照要求,全交叉編譯文件是:
# Set minimum cmake version required for cross-compiling to work.
cmake_minimum_required(VERSION 2.6)
# Build with rm CMakeCache.txt; cmake -DCMAKE_TOOLCHAIN_FILE=/home/crosscompile/dev/raspberry_pi/CMakeCross.txt ..
# Set target system name.
SET (CMAKE_SYSTEM_NAME Linux)
# Set compiler name.
SET (CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
SET (CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
# Set path(s) to search for libraries/binaries/headers.
SET (CMAKE_FIND_ROOT_PATH /home/crosscompile/dev/raspberry_pi/rootfs/)
# Ensure only cross-compiler directories are searched.
SET (ONLY_CMAKE_FIND_ROOT_PATH TRUE)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# Set output/install directory to safe place.
SET (CMAKE_INSTALL_PREFIX /home/crosscompile/dev/raspberry_pi/install/)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rpath-link=/lib/arm-linux-gnueabihf")
set(THREADS_PTHREAD_ARG 0)
set(CMAKE_CROSSCOMPILING ON CACHE BOOL "Cross-compiling" FORCE)
從我所看到的是你必須設置這個變量在您的工具鏈文件中爲true。示例:http://stackoverflow.com/questions/6476203/how-can-i-make-cmake-use-specific-compiler-and-flags-when-final-compilation-stag – Hayt
@Hayt:不,它應該是足以在工具鏈文件中設置變量'CMAKE_SYSTEM_NAME'。之後,應該自動設置變量'CMAKE_CROSSCOMPILING'。對於作者:顯示工具鏈文件本身。 – Tsyvarev
@Tsyvarev啊好吧知道:) – Hayt