CLion中C/C++项目交叉编译说明 - 在x86编译,ARM开发板运行

CLion中C/C++项目交叉编译说明 - 在x86编译,ARM开发板运行

1、 新建一个CLion项目,就会有 cpp 源代码文件和 CMakeLists.txt 文件。在项目的 CMakeLists.txt 的开始处加上如下所示配置(配置中的目录为你需要编译器的目录),平时开发调试的时候,设置SET(CROSS_COMPILE 0) 即不启用交叉编译。

SET(CROSS_COMPILE 1)

IF(CROSS_COMPILE)
    SET(CMAKE_SYSTEM_NAME linux)
    SET(TOOLCHAIN_DIR "你的gcc所在的路径(截取bin之前部分)")

    # specify the cross compiler
    SET(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc)
    SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-g++)
    SET(GNU_FLAGS "-mfpu=vfp -fPIC")
    SET(CMAKE_CXX_FLAGS "${GNU_FLAGS} ")
    SET(CMAKE_C_FLAGS "${GNU_FLAGS} ")

    # where is the target environment
    SET(CMAKE_FIND_ROOT_PATH  ${TOOLCHAIN_DIR}
            ${TOOLCHAIN_DIR}/arm-linux-gnueabihf/include
            ${TOOLCHAIN_DIR}/arm-linux-gnueabihf/lib)

    # search for programs in the build host directories (notnecessary)
    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)

ENDIF(CROSS_COMPILE)

原来的教程说放在这段放在开头,那就放开头吧。我目前放在结尾,如图所示,影响不大。

修改之后保存一下,如果格式没啥问题,应该会提示让你 Reload changes 的。格式有问题,大概率是SET前面的空格,换成 Tab 就行了。

2、 交叉编译:首先SET(CROSS_COMPILE 1),然后把项目通过 scp 传输到 Linux 虚拟机或者服务器上。这个设置为1就是一个开关,设置为0就是不启用这段配置。如果一直都是交叉编译,应该可以将 IF 和 ENDIF 这两行去掉,然后所有的 SET 语句前面的缩进去掉。

3、执行 cmake /path/your/project (项目根目录),这一步会生成交叉环境配置的Makefile。我是直接用的 CLion 那个绿色小三角,见图右上角。

4、 在项目根目录,执行 make ,这一步会生成和项目名同名的可执行文件 demo 中为 hello ,在debug 那个目录下面,我的是 hello_cross_compile 。注意 CMakeLists.txt 中的对应位置。

5、使用scp或者tftp、nfs将可执行文件复制到开发版,运行可执行文件。

CLion中C/C++项目交叉编译说明 - 在x86编译,ARM开发板运行_第1张图片

这是我的版本,仅供 (copy) 参考。注意 target_link 那行你们不一定需要。以这行为分界线,上面部分是自动生成的,下面部分才是本次的设置(不过其实这部分应该放顶部)。

cmake_minimum_required(VERSION 3.7)
project(hello_cross_compile)

set(CMAKE_CXX_STANDARD 98)

set(SOURCE_FILES main.cpp)
add_executable(hello_cross_compile ${SOURCE_FILES})

target_link_libraries(hello_cross_compile usb-1.0)

SET(CROSS_COMPILE 1)

IF(CROSS_COMPILE)
    SET(CMAKE_SYSTEM_NAME linux)
    SET(TOOLCHAIN_DIR "/home/lmy/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/sysroots/x86_64-arago-linux/usr")

    # specify the cross compiler
    SET(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc)
    SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-g++)
    SET(GNU_FLAGS "-mfpu=vfp -fPIC")
    SET(CMAKE_CXX_FLAGS "${GNU_FLAGS} ")
    SET(CMAKE_C_FLAGS "${GNU_FLAGS} ")

    # where is the target environment
    SET(CMAKE_FIND_ROOT_PATH  ${TOOLCHAIN_DIR}
            ${TOOLCHAIN_DIR}/arm-linux-gnueabihf/include
            ${TOOLCHAIN_DIR}/arm-linux-gnueabihf/lib)

    # search for programs in the build host directories (notnecessary)
    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)

ENDIF(CROSS_COMPILE)

参考
clion中C项目交叉编译说明

你可能感兴趣的:(嵌入式,c++,arm,linux)