如何解决如何使用 CMake 进行交叉编译
我目前有一个 Visual Studio Code 项目,我正在使用 CMake 运行我的 main.cpp 并且一切正常。我还可以从 Ubuntu 下的命令终端运行我的程序。我还设法交叉编译了一个简单的程序,但问题是我的 main.cpp 在一个大项目中。 我的问题是,是否有一种简单的方法可以为 ARM 架构(我在 x64-64 上)交叉编译我的 main.cpp。 我听说过工具链,但这些例子并不真正符合我的情况,所以我写了这个问题。我不知道如何编辑我的 CMakeLists.txt 来做到这一点。 这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
project(hash VERSION 0.1.0)
FILE(GLOB srcSources src/*.cpp)
find_package(Qt5Core REQUIRED)
add_executable(hash
${srcSources}
)
target_link_libraries(hash Qt5::Core)
target_include_directories(hash PUBLIC
"${PROJECT_SOURCE_DIR}/include"
)
感谢您的帮助
解决方法
您可以尝试创建一个 CMake 工具链文件,例如,您可以将其命名为 my_toolchain.cmake:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR ARM)
set(TOOLCHAIN_PREFIX arm-linux-gnueabi-)
execute_process(
COMMAND which ${TOOLCHAIN_PREFIX}gcc
OUTPUT_VARIABLE BINUTILS_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
get_filename_component(ARM_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++)
set(CMAKE_C_COMPILER_WORKS 1)
set(CMAKE_CXX_COMPILER_WORKS 1)
set(CMAKE_SYSROOT ${ARM_TOOLCHAIN_DIR}/../arm-linux-gnueabi)
set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然后用它来调用 CMake:
cmake -DCMAKE_TOOLCHAIN_FILE="my_toolchain.cmake" -S. -Bbin
当然你需要在你的交叉编译器的 sysroot 的 /lib 路径中安装 Qt-core
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。