cmake:CMAKE_SYSTEM_PROCESSOR为空是怎么回事儿?

本文详细解析了在使用CMake进行交叉编译时,CMAKE_SYSTEM_NAME和CMAKE_SYSTEM_PROCESSOR参数的重要性。若仅设置CMAKE_SYSTEM_NAME而忽略CMAKE_SYSTEM_PROCESSOR,会导致后者值为空的错误。文章通过实例演示正确配置方法。

今天执行cmake创建Makefile的时候出了个怪事:CMAKE_SYSTEM_PROCESSOR的值为空
反复测试到到了原因:我在执行cmake时加了参数-DCMAKE_SYSTEM_NAME=Linux

cmake  . -G "Eclipse CDT4 - Unix Makefiles"  -DCMAKE_SYSTEM_NAME=Linux

根据cmake官方关于交叉编译的介绍: 《Cross Compiling for Linux》,CMAKE_SYSTEM_NAMECMAKE_SYSTEM_PROCESSOR是交叉编译的时候必须指定的两个参数。

所以如果在cmake命令行定义了CMAKE_SYSTEM_NAME,就必须也定义CMAKE_SYSTEM_PROCESSOR,如下。

cmake  . -G "Eclipse CDT4 - Unix Makefiles"  \
	-DCMAKE_SYSTEM_NAME=Linux \
	-DCMAKE_SYSTEM_PROCESSOR=x86_64

如果在命令行只是定义了CMAKE_SYSTEM_NAME,就会出现CMAKE_SYSTEM_PROCESSOR为空这种奇怪的问题。

另外经测试如果在CMakeLists.txt脚本中用set命令设置CMAKE_SYSTEM_NAME的值,并不会影响CMAKE_SYSTEM_PROCESSOR的值:

set(CMAKE_SYSTEM_NAME Linux)
CMake编译时FFMPEG一直显示Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.26100. CMake Warning (dev) at D:/CMake/share/cmake-4.0/Modules/Platform/Windows-MSVC.cmake:556 (enable_language): project() should be called prior to this enable_language() call. Call Stack (most recent call first): D:/CMake/share/cmake-4.0/Modules/Platform/Windows-MSVC.cmake:529 (__windows_compiler_msvc_enable_rc) D:/CMake/share/cmake-4.0/Modules/Platform/Windows-MSVC-CXX.cmake:6 (__windows_compiler_msvc) D:/CMake/share/cmake-4.0/Modules/CMakeCXXInformation.cmake:48 (include) CMakeLists.txt:107 (enable_language) This warning is for project developers. Use -Wno-dev to suppress it. CMake Warning (dev) at D:/CMake/share/cmake-4.0/Modules/Platform/Windows-MSVC.cmake:556 (enable_language): project() should be called prior to this enable_language() call. Call Stack (most recent call first): D:/CMake/share/cmake-4.0/Modules/Platform/Windows-MSVC.cmake:529 (__windows_compiler_msvc_enable_rc) D:/CMake/share/cmake-4.0/Modules/Platform/Windows-MSVC-C.cmake:5 (__windows_compiler_msvc) D:/CMake/share/cmake-4.0/Modules/CMakeCInformation.cmake:48 (include) CMakeLists.txt:107 (enable_language) This warning is for project developers. Use -Wno-dev to suppress it. Detected processor: AMD64 CMake Warning at cmake/OpenCVDetectCXXCompiler.cmake:177 (message): OpenCV does not recognize MSVC_VERSION "1943". Cannot set OpenCV_RUNTIME Call Stack (most recent call first): CMakeLists.txt:161 (include) CMake Warning at cmake/OpenCVUtils.cmake:758 (message): Unexpected option: WITH_CUFFT (=ON) Condition: IF (WITH_CUDA) Call Stack (most recent call first): CMakeLists.txt:251 (OCV_OPTION) CMake Warning at cmake/OpenCVUtils.cmake:758 (message): Unexpected option: WITH_CUBLAS (=ON) Condition: IF (WITH_CUDA) Call Stack (most recent call first): CMakeLists.txt:254 (OCV_OPTION) CMake Warning at cmake/OpenCVUtils.cmake:758 (message): Unexpected option: WITH_CUDNN (=ON) Condition: IF (WITH_CUDA) Call Stack (most recent call first): CMakeLists.txt:257 (OCV_OPTION)0K
05-12
cmake_minimum_required(VERSION 3.5) set(BUILD_SHARED_LIBS OFF) project(mach_misc) if ($ENV{BUILD_DEBUG}) add_definitions("-g -O0") endif () # Default to C++14 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif() if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") message(WARNING "x86_64 is not supported") return() endif() SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) find_package(ament_cmake_auto REQUIRED) ament_auto_find_build_dependencies() find_package(interfaces_mos_generated REQUIRED) find_package(constants REQUIRED) find_package(mach_log) find_package(mos REQUIRED) # find_package(tf2 REQUIRED) find_package(Eigen3 REQUIRED) find_package(toml11 REQUIRED) message(STATUS "MACH_AP_THOR_CMAKE_PREFIX_PATH is ${MACH_AP_THOR_CMAKE_PREFIX_PATH}") find_package(Threads) SET(CMAKE_PREFIX_PATH ${MACH_AP_THOR_CMAKE_PREFIX_PATH}) set(AMSR_STATIC_LIBRARIES TRUE) find_package(AMSR COMPONENTS amsr::applicationbase amsr::com_r18_03 amsr::em_application_client amsr::ipcbinding amsr::log_ara_logging amsr::osa_common amsr::socal amsr::someipbinding amsr::vac amsr::phm_common amsr::phm_external amsr::phm amsr::phm_base_services amsr::phm_state_management_client amsr::phm_watchdog_client amsr::phm_daemon_impl amsr::tsync_common amsr::tsync_ara ) include_directories(${CMAKE_SOURCE_DIR}/src ${CONAN_INCLUDE_DIRS} ${Eigen3_INCLUDE_DIRS}) add_executable(mach_miscExe main.cpp data_compressed/src/config/cfg_mgr.cpp data_compressed/src/publish/pub_base.cpp data_compressed/src/publish/pub_mgr.cpp data_compressed/src/publish/pub_custom.cpp data_compressed/src/subscribe/sub_base.cpp data_compressed/src/data_compressed_node.cpp src/mach_misc_sr_node.cpp trigger_node/src/trigger_node.cpp trigger_node/src/config/config_manager.cpp trigger_node/src/rule/rule_base.cpp trigger_node/src/rule/rule_manager.cpp trigger_node/src/action/action_manager.cpp trigger_node/src/variable/variable_manager.cpp ) target_compile_definitions(mach_miscExe PRIVATE ENABLE_AP_CODE) target_include_directories(mach_miscExe PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/data_compressed/src ${CMAKE_CURRENT_SOURCE_DIR}/trigger_node/src ) ament_target_dependencies(mach_miscExe constants) target_link_libraries(mach_miscExe # ${tf2_LIBRARIES} # Eigen3::Eigen mach_log::mach_log interfaces_mos_generated::interfaces_mos_generated amsr::applicationbase amsr::com_r18_03 amsr::em_application_client amsr::ipcbinding amsr::log_ara_logging amsr::osa_common amsr::socal amsr::someipbinding amsr::vac amsr::phm_common amsr::phm_external amsr::phm amsr::phm_base_services amsr::phm_state_management_client amsr::phm_watchdog_client amsr::phm_daemon_impl amsr::tsync_common amsr::tsync_ara Threads::Threads mos::mos_common mos::msg_interface mos::ap_misc # mos_e2e_idls calibration_interfaces::mos_msg toml11::toml11 # algo_interface::algo_interface ) message("==============MACH_AP_RELEASE_BASE_DIR" ${MACH_AP_RELEASE_BASE_DIR}) # file(COPY ${MACH_AP_RELEASE_BASE_DIR}/res/${PROCESS_NAME}Exe/etc DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # install(TARGETS ${PROJECT_NAME}Exe # DESTINATION bin # ) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/trigger_node/src/config/remote_config.toml DESTINATION config) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data_compressed/src/config/module_config.toml DESTINATION config) # install(DIRECTORY ${MACH_AP_RELEASE_BASE_DIR}/res/${PROJECT_NAME}Exe/etc/ DESTINATION etc) install(TARGETS mach_miscExe DESTINATION bin ) WARNING:colcon.colcon_cmake.task.cmake.build:Could not run installation step for package 'mach_misc' because it has no 'install' target
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值